返回列表 上一主題 發帖

[發問] 在VBA中,如何使用巨集隱藏部份工作表、及取消隱藏全部工作表?

本帖最後由 准提部林 於 2022-12-22 18:20 編輯

做個樣板//各組工作表可任意組合
傳錯檔//看下下樓

TOP

回復 11# 准提部林


版主大大,附加檔應該是主題為 [符合多條件帶出相關資訊] 的解答唷。

後學看了內部公式有包含特定文字的條件篩選公式很好用,已收藏。謝謝囉。

TOP

回復 12# goner

上錯檔了//
xx0001.rar (10.41 KB)

TOP

回復 9# Andy2483

個人認為用一些有意思的 label 代替 111 比較好
如 Skip, NoGroupSelection
即是
Goto Skip
.
.
Skip:

TOP

回復 14# Emily


    謝謝前輩
111跟後學很久了,厚臉皮第1,錯誤最多第1,問題最多第1,請不要嫌棄他
謝謝前輩提醒後學學習多點樂趣,也可以更醒目找到目標
後學用這帖歡迎前輩,請前輩多多指教
http://forum.twbts.com/thread-23851-1-1.html
Hi
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 Andy2483 於 2022-12-23 11:09 編輯

回復 13# 准提部林


    謝謝前輩指導
後學在此範例學習到很多知識,範例心得註解如下,請前輩再指導,謝謝

Sub TEST_A1()
Dim S(5), Nx, SS$, Sht As Worksheet, Y As Boolean
'↑宣告變數:S是一維陣列S(0)~S(5),Nx是通用型變數,Sht是工作表變數,SS是字串變數
'Y是布林變數

Nx = InputBox("請輸入 0~4 數字!", "工作表顯示隱藏控制", 0)
'↑令Nx這通用型變數是InputBox() 函式回傳值
'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/inputbox-function

If InStr("/1/2/3/4/0/", Nx) < 2 Then Exit Sub
'↑如果Nx通用型變數值用 InStr()函式回傳值<2 ,就結束程式執行
S(0) = "/總表/表1/表2/表3/"
'↑令S陣列索引號0的字串是雙引號包夾的文字符號
S(1) = "/Sheet4/Sheet5/Sheet6/"
'↑類推
S(2) = "/Sheet7/Sheet8/"
'↑類推
S(3) = "/Sheet9/Sheet10/Sheet11/Sheet12/"
'↑類推
S(4) = "/Sheet13/Sheet14/Sheet15/"
'↑類推
SS = S(0) & S(Nx):
'↑令SS這字串變數是 索引號0的S陣列值 連接索引號是 Nx變數的S陣列值
'如果想新增加工作表都是要顯示的,就在S(0)裡照規則添加
'如果想新增加工作表隨需求群組顯示/隱藏的,就在S(1)~S(4)裡照規則添加

For Each Sht In Sheets
'↑設順迴圈!令Sht 是工作表之一,從前面表輪到後面表
    Y = False
    '↑Y這布林變數是 False
    If Nx = 0 Or InStr(SS, "/" & Sht.Name & "/") > 0 Then Y = True
    '↑如果Nx變數是 0,或用 InStr()函式回傳值大於 0 ??,
    'InStr(如果省略,會從第一個字元位置開始搜尋 , SS字串變數, Sht迴圈工作表名前後包夾"/"符號)
    'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/instr-function
    'if條件成立!就讓Y布林變數是 True

    Sht.Visible = Y
    '↑令Sht迴圈工作的顯示或隱藏隨 Y布林變數做變化
   '如果輸入 0 會全部顯示!!
Next
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 13# 准提部林


    謝謝前輩指導把工作表的顯示或隱藏用布林變數控制,看得懂,但是後學需要更努力學習才有機會應用,後學以後遇到物件的0/1變化可以回來看這帖
再次謝謝前輩
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 13# 准提部林


哇!俐落的控制,不用開開關關的,這樣的寫法控制似乎讓執行速度變快了,且不容易錯誤。

感謝 准提部林 版主,也謝謝 Andy 的熱心注釋。

這幫助很多,謝謝。

TOP

回復 1# goner


  
  
依你的提問 如下圖片 在範圍內的運作看看

總表的程式碼如下
  1. Option Explicit
  2. Private Sub CommandButton1_Click()  '取消隱藏全部工作表的按鍵程式碼
  3.         Dim Sh As Worksheet
  4.         Application.ScreenUpdating = False
  5.         For Each Sh In Sheets
  6.             Sh.Visible = True
  7.         Next
  8.         Application.ScreenUpdating = True
  9. End Sub
  10. Private Sub Worksheet_Change(ByVal Target As Range)
  11.         If Target.Count = 1 Then HideSheet Target
  12. End Sub
  13. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  14.     If Target.Count = 1 Then HideSheet Target
  15. End Sub
  16. Sub HideSheet(Target As Range)
  17.     Dim Rng As Range, A組 As String, E As Variant
  18.     If Application.Intersect(Range("A1").CurrentRegion, Target) Is Nothing Then Exit Sub
  19.     Application.EnableEvents = False       '不觸動 Worksheet預設事件程式
  20.     On Error GoTo Err                                    '程式產生錯誤時移到 標記點
  21.     With Range("A1").CurrentRegion
  22.         Set Rng = Range(.Cells(2, Target.Column), .Cells(.Rows.Count, Target.Column))
  23.     End With
  24.     A組 = "總表"    'A組 = "總表,表1,表2,表3"    ' ***可修改 必須顯示的工作表
  25.     For Each E In Rng
  26.         A組 = A組 & "," & E
  27.         Set Target = E
  28.         Debug.Print TypeName(Sheets(E.Value)) ' '測試儲存格的工作表名稱是否存
  29.     Next
  30.     A組 = "," & A組 & "," '
  31.     Application.ScreenUpdating = False
  32.     For Each E In Sheets
  33.             E.Visible = InStr(UCase(A組), "," & UCase(E.Name) & ",") > 0
  34.             '* 比對完全相同的工作表名稱 ->>     "," & UCase(i.Name) & ","
  35.     Next
  36.     Application.ScreenUpdating = True
  37.     Application.EnableEvents = True      '回復觸動 Worksheet預設事件程式
  38.     Exit Sub
  39. Err:                          '處理程式碼的錯誤
  40.     MsgBox IIf(Target <> "", "  找不到 工作表 [" & Target & "]", Target.Address(0, 0) & "沒有輸入....")
  41.     Application.EnableEvents = True      '回復觸動 Worksheet預設事件程式
  42. End Sub
複製代碼

TOP

回復 19# lee88


    高手雲集的論壇
謝謝前輩,後學藉此帖學習到很多知識,學習心得如下,請前輩再指導

總表_工作表明細:


工作表模組:


Module模組:


測試結果:


找不到:
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 並非有錢魷是快樂,問心無愧心最安。
返回列表 上一主題