激活工作表的問題
範本中如無此工作表就新增,如已存在的工作表就將擷取數據傳至[存在工作表],為何不行.ms1="銷匯3月"
WORKSHEETS(MS1)............這個不行. [b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=121330&ptid=24008]1#[/url] [i]dou10801[/i] [/b]
謝謝論壇,謝謝前輩發表此主題與範例
後學藉此帖練習陣列,學習方案如下,請前輩參考
Option Explicit
Sub TEST()
Application.DisplayAlerts = False
Dim Brr, R&, i&, j&, Nsht$, Sht, M
Sht = Application.InputBox("請輸入銷匯或進匯", "工作表名稱", "銷匯", , , , , 2)
If InStr("銷匯/進匯", Sht) = 0 Then Exit Sub Else Nsht = Sht: Set Sht = Sheets(Sht)
M = Application.InputBox("請輸入月份", "工作表名稱", 3, , , , , 2)
If Val(M) = 0 Then Exit Sub Else Nsht = Nsht & M & "月"
Brr = Range(Sht.[P1], Sht.[A65536].End(3))
For i = 1 To UBound(Brr)
If Format(Brr(i, 2), "M") <> Val(M) And i <> 1 Then GoTo i01
R = R + 1: For j = 1 To 16: Brr(R, j) = Brr(i, j): Next
i01: Next
On Error Resume Next
Sheets(Nsht).Delete
With Worksheets.Add(after:=Worksheets(Sheets.Count))
.Name = Nsht
.[A1].Resize(R, 16) = Brr
.Columns(2).NumberFormatLocal = "yyyy-m-d"
.EntireColumn.AutoFit
End With
Erase Brr: Set Sht = Nothing
End Sub [i=s] 本帖最後由 Andy2483 於 2024-1-17 20:06 編輯 [/i]
謝謝論壇,謝謝各位前輩
後學藉此帖複習昨天的方案,方案學習心得註解如下,請各位前輩指教
Option Explicit
Sub TEST()
Application.DisplayAlerts = False
[color=SeaGreen]'↑令不要再跳出詢問窗(問真的要刪除工作表嗎?),直接刪了![/color]
Dim Brr, R&, i&, j&, Nsht$, Sht, M
[color=SeaGreen]'↑宣告變數[/color]
Sht = Application.InputBox("請輸入銷匯或進匯", "工作表名稱", "銷匯", , , , , 2)
[color=SeaGreen]'↑令Sht變數是 輸入窗的回傳結果[/color]
If InStr("銷匯/進匯", Sht) = 0 Then Exit Sub Else Nsht = Sht: Set Sht = Sheets(Sht)
[color=SeaGreen]'↑如果InStr()回傳 Sht變數不包含在字串裡!就結束程式,否則[/color]
[color=SeaGreen]'否則就令Nsht變數(字串)是 sht變數值,令Sht變數是名為 Sht變數的工作表[/color]
M = Application.InputBox("請輸入月份", "工作表名稱", 3, , , , , 2)
[color=SeaGreen]'↑令M變數是 輸入窗的回傳結果[/color]
If Val(M) = 0 Then Exit Sub Else Nsht = Nsht & M & "月"
[color=SeaGreen]'↑如果InStr()回傳值轉化為數值後是 0!就結束程式,否則
'否則令Nsht變數後面再連接 M變數,再連接 "月",成為新字串[/color]
Brr = Range(Sht.[P1], Sht.[A65536].End(3))
[color=SeaGreen]'↑令Brr變數是 二維陣列,以Sht變數(工作表)的A~P欄儲存格值帶入陣列中[/color]
For i = 1 To UBound(Brr)
[color=SeaGreen]'↑設順迴圈![/color]
If Format(Brr(i, 2), "M") <> Val(M) And i <> 1 Then GoTo i01
[color=SeaGreen] '↑如果第2欄陣列值(日期)月份 不同於M變數轉化為的數值,
'而且i變數不是1,就跳到標示i01的位置繼續執行[/color]
R = R + 1: For j = 1 To 16: Brr(R, j) = Brr(i, j): Next
[color=SeaGreen] '↑令R變數記錄結果資料要放在第幾列,
'設順迴圈,將結果資料覆蓋掉原陣列資料,寫入符合條件的資料[/color]
i01: Next
On Error Resume Next
[color=SeaGreen]'↑令程序遇到錯誤不停下來,繼續進行下個程序[/color]
Sheets(Nsht).Delete
[color=SeaGreen]'↑令刪除名為 Nsht變數的工作表(如果沒有此工作表可刪除,會跳過)[/color]
With Worksheets.Add(after:=Worksheets(Sheets.Count))
[color=SeaGreen]'↑以下是關於在索引最後新增一個工作表的程序[/color]
.Name = Nsht
[color=SeaGreen] '↑令工作表名字是 Nsht變數所帶的字串[/color]
.[A1].Resize(R, 16) = Brr
[color=SeaGreen] '↑令[A1]儲存格擴展適當範圍寫入Brr陣列值,超過此範圍的陣列值忽略[/color]
.Columns(2).NumberFormatLocal = "yyyy-m-d"
[color=SeaGreen] '↑令B欄格式依照設定方式顯示[/color]
.EntireColumn.AutoFit
[color=SeaGreen] '↑令這範圍欄位自動調整欄寬[/color]
End With
Erase Brr: Set Sht = Nothing
[color=SeaGreen]'↑令釋放變數[/color]
End Sub [b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=121336&ptid=24008]3#[/url] [i]Andy2483[/i] [/b]
感謝 Andy2483 收下學習.
頁:
[1]