から:
Worksheets(Array(1,2,3,4,5,6,7,8,9,10,11,...,200)).Visible = True
が、複数のシートを非表示解除すると、ループに
が必要ですただし、では、カスタムビュー([表示]タブ)を使用すると、はるかに高速な方法があります。
使用し、それを呼び出すには
For 201 Worksheets
Loop HideAll - Time: 0.039 sec (initial setup - sets array, except one Ws in one operation)
Loop ShowAll - Time: 0.648 sec (initial setup - unhides all using a loop)
View ShowAll - Time: 0.023 sec (consecutive runs - no loop)
View HideAll - Time: 0.023 sec (consecutive runs - no loop)
Option Explicit
Public Sub SetWsVisibility(Optional ByVal vis As Boolean = False, _
Optional ByVal visibleWs As Long = 0)
Static vSet As Boolean, hSet As Boolean, wsCount As Long, lastV As Long, i As Long
With ThisWorkbook
wsCount = .Worksheets.Count - 1
'if visibleWs is 0 last ws is visible, or use any other valid sheet index
visibleWs = IIf(visibleWs < 1 Or visibleWs > wsCount, wsCount + 1, visibleWs)
If wsCount <> .Worksheets.Count - 1 Or visibleWs <> lastV Then
vSet = False
hSet = False
Else
If vSet And vis Then .CustomViews("ShowAllWs").Show: Exit Sub
If hSet And Not vis Then .CustomViews("HideAllWs").Show: Exit Sub
End If
Application.ScreenUpdating = False
If vis Then
For i = 1 To wsCount + 1
With .Worksheets(i)
If Not .Visible Then .Visible = vis
End With
Next
.Worksheets(1).Activate
.CustomViews.Add ViewName:="ShowAllWs" 'Save View (one-time operation)
vSet = True
Else
If visibleWs <> lastV Then
For i = 1 To wsCount + 1
With .Worksheets(i)
If Not .Visible Then .Visible = 1
End With
Next
End If
Dim arr() As Variant, j As Long
ReDim arr(1 To wsCount)
j = 1
For i = 1 To wsCount + 1
If i <> visibleWs Then arr(j) = i Else j = j - 1
j = j + 1
Next
.Worksheets(arr).Visible = vis
.CustomViews.Add ViewName:="HideAllWs" 'Save View (one-time operation)
hSet = True
lastV = visibleWs
End If
Application.ScreenUpdating = True
End With
End Sub
:
コード怒鳴るは2つのビュー1 "ShowAllWs"、および2. "HideAllWs" 賢明
パフォーマンスを生成し、これは:
Public Sub UpdateWsVisibility()
SetWsVisibility 0, 5 'or 0 to hide them (or True/False respectively)
End Sub
配列に178のワークシート名をすべて手動で入力しない限り、 'ThisWorkbook.Worksheets(Array(" Sheet1 "、" Sheet2 "など))。Visible = xlSheetHidden'。画面更新を無効にしたり、計算を一時停止したり、イベントを非表示にする前に無効にすることができます。 – PatricK
特にExcelosaurusとpaul bicaにお答えいただき、ありがとうございました! 2つの天才の啓示は、それらを配列に追加して多数のシートを即座に隠すことができ、カスタムビューを使用してワークシートの可視性を設定できることでした。あなたの努力と助けをありがとう、ありがとう!あなたたち最高! – mattbierwirth
私はまた、ブック内のすべてのワークシートを隠したり隠したりすることを含まない、昨夜の問題解決のための別の解決策を思いついたと言いたいと思います。私は、179枚のうち1枚だけが表示されたブックを使用してプロセスを開始できる場合は、表示したいワークシートの名前を表示して、元のシートが名前で表示されないようにすることができますユーザーの目的に現在適用可能です。このようにしてループはありません。私はまだすべての答えを非常に感謝しています! – mattbierwirth