麻辣家族討論版版's Archiver

dou10801 發表於 2023-5-29 13:52

激活工作表的問題

範本中如無此工作表就新增,如已存在的工作表就將擷取數據傳至[存在工作表],為何不行.
ms1="銷匯3月"
WORKSHEETS(MS1)............這個不行.

Andy2483 發表於 2023-5-29 16:09

[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

Andy2483 發表於 2023-5-30 07:38

[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

dou10801 發表於 2023-6-2 09:16

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=121336&ptid=24008]3#[/url] [i]Andy2483[/i] [/b]
感謝 Andy2483 收下學習.

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供