返回列表 上一主題 發帖

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

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

請問各位先進在VBA中,如何使用巨集隱藏部份工作表、及取消隱藏全部工作表?
假設有15個工作表,A組1.2.3工作表、B組4.5.6工作表、C組7.8.9工作表、D組10.11.12工作表、E組13.14.15
巨集1:A、B工作表不隱藏,其他C、D、E工作表隱藏。
巨集2:A、C工作表不隱藏,其他B、D、E工作表隱藏。
巨集3:A、D工作表不隱藏,其他B、C、E工作表隱藏。
巨集4:A、E工作表不隱藏,其他B、C、D工作表隱藏。

有找到隱藏/取消隱藏的VBA,但不知如何執行部份、全部
Sub UnhideSheet()
       Sheets("Sheet1").Visible = True
End Sub

Sub HideSheet()
       Sheets("Sheet1").Visible = False
End Sub

請各位先進不吝指教。謝謝。

感謝Andy2483先進的解答
以上VBA程式碼基本上可以使用,有將V替換掉,輸入0、4正常運作。
V = ",工作表1,工作表2,工作表3,工作表4,工作表5,工作表6,工作表7,工作表8,工作表9,工作表10,工作表11,工作表12,工作表13,工作表14,工作表15"
配合 Sub 收集15個工作表名() 替換成
V = [A1]

但使用上輸入1、2、3皆會在這行出現錯誤 Sheets(G3).Visible = False ,錯誤提示 [陣列索引超出範圍],
錯誤後 E組工作表 不會執行到隱藏。


'執行下列程式碼可取得 15個工作表名的字串
Sub 收集15個工作表名()
Dim i&, Na$
For i = 1 To 15
   Na = Na & "," & Sheets(i).Name
Next
Workbooks.Add      <<測試時無使用新增工作表,在原活頁簿新增 [工作表1] 使用遇以上問題。
[A1] = "V = """ & Na & """"
End Sub
'把 15個工作表名的字串 與上方紅字置換掉

請問如何調整解決,謝謝。:)

TOP

本帖最後由 goner 於 2022-12-20 16:55 編輯

感謝Andy的熱心幫忙以及各位的回覆,現在找到原因囉^^
檢視 [區域變數] 視窗,發現其中有個變數多了一個 "雙引號,而導致無法正確判斷工作表名稱,調整後已可正常使用功能。
  1. Option Explicit
  2. Sub 工作表顯示隱藏控制()
  3. Application.ScreenUpdating = False

  4. Dim N%, i&, xR, V, Y, Z, No, G1, G2, G3
  5. No = InputBox("請輸入 0~4 數字!", "工作表顯示隱藏控制", 0)

  6. If No < 0 Or No > 4 Then Exit Sub

  7. Set Y = CreateObject("Scripting.Dictionary")
  8. V = [A1]    ' 這裡配合巨集 收集15個工作表名() 使用,蒐集目前活頁簿所有工作表名稱。
  9. V = Split(V, ",")
  10. For Each xR In [A1:E1]
  11.    Z = Split(xR.Address, "$")(1)
  12.    Y(Z) = Array(V(1 + N), V(2 + N), V(3 + N))
  13.    N = N + 3
  14. Next

  15. For Each xR In ActiveWorkbook.Worksheets
  16.    xR.Visible = True
  17. Next

  18. If No = 0 Then GoTo 111:

  19. Select Case No
  20.     Case 1: G1 = Y("C"): G2 = Y("D"): G3 = Y("E")
  21.     Case 2: G1 = Y("B"): G2 = Y("D"): G3 = Y("E")
  22.     Case 3: G1 = Y("B"): G2 = Y("C"): G3 = Y("E")
  23.     Case 4: G1 = Y("B"): G2 = Y("C"): G3 = Y("D")
  24. End Select
  25. Sheets(G1).Visible = False
  26. Sheets(G2).Visible = False
  27. Sheets(G3).Visible = False

  28. 111:
  29. ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
  30. Set Y = Nothing
  31. Erase V
  32. End Sub

  33. '執行下列程式碼可取得 15個工作表名的字串
  34. Sub 收集15個工作表名()

  35. Dim i&, Na$
  36. For i = 1 To 15
  37.    Na = Na & "," & Sheets(i).Name
  38. Next
  39. 'Workbooks.Add    ' 以原有活頁簿使用,所以不新增活頁簿。
  40. [A1] = "V=""" & Na & ""    ' 這裡有做調整。原[A1] = "V = """ & Na & """"  變數會多了一個 "雙引號,而導致無法正確判斷工作表名稱。

  41. End Sub
  42. '把 15個工作表名的字串 與上方紅字置換掉
複製代碼
以下是一次 取消隱藏 所有工作表程式碼,供參考。
  1. Sub UnhideAllSheets()
  2.         Dim UAS As Worksheet

  3.         For Each UAS In ActiveWorkbook.Worksheets
  4.                 UAS.Visible = xlSheetVisible
  5.         Next UAS

  6. End Sub
複製代碼

TOP

回復 6# Andy2483


第一次發問,以上發問都沒注意到要使用 [回覆] 功能, 請見諒!
再次謝謝Andy的幫忙。
:handshake

TOP

回復 9# Andy2483


    謝謝還這麼用心、詳細的註解,還有附加連結網站說明,感謝。
    此讓學生學習了很多,更清楚的了解用法。

TOP

回復 11# 准提部林


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

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

TOP

回復 13# 准提部林


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

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

這幫助很多,謝謝。

TOP

回復 19# lee88


原來還有這麼多方法,真謝謝指導,謝謝提供不一樣的使用方式。

真的很多高手^^

EXCEL的VBA會越玩越好玩,似乎什麼功能都可以達成,只可惜好像不能轉出成EXE檔。

TOP

        靜思自在 : 【為善競爭】人生要為善競爭,分秒必爭。
返回列表 上一主題