Excelがアクティブなシートを下のコードで変更しているのはなぜですか?"Worksheet.Visible = xlSheetVisible"アクティブなタブを変更します
多くのタブを持つブックがあり、VBAを使用してリストボックス内の自分の選択に基づいて目に見えるシートをフィルタリングしています。ブレークポイントまたはApplication.Wait (Now)
のいずれかを使用して隠れたシートを表示した後でプログラムを一時停止すると、すべてが正しく実行されますが、これは私を悪い習慣にしてしまい、代替手段を好むでしょう。空白のタブが多い新しいブックでエラーを再現することはできません。開始時と終了時にApplication.ScreenUpdating
呼び出しを削除しても結果は変わらないため、Excelを使用して各シートを処理するには時間がかかりすぎます奇妙なエラー。
誤ってリストボックスの間違った項目を選択すると、Excelが別のシートに切り替わり、そのリストボックスを含むシートを手動でクリックして選択内容を修正する必要があるため、このバグは面倒です。
Application.ScreenUpdating = False
For Each mySheet In Worksheets
Select Case mySheet.Name
Case "Cost Overview", "Project Eng.", "Mfg Development", "Labor Summary", "S.O.P.", "MFGD Time", "MFGD Group", "HowTo", ChrW(&H21BB)
'These sheets are always visible, so do nothing
Case Else
mySheet.Visible = xlSheetVisible 'or xlSheetHidden or xlSheetVeryHidden or xlSheetVisible
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Application.Wait (Now) 'WITHOUT THIS SLIGHT DELAY, ACTIVE TAB CHANGES
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End Select
Next
For i = 1 To Worksheets("Labor Summary").ListBoxes("ListBoxForSlicers").ListCount
'The category names are "Div 1" and "Div 2", referenced here and in the ListBox from ColorIndexTable'
CategoryName = Application.WorksheetFunction.index(Range("ColorIndexTable[Category]"), i)
CategorySelected = Worksheets("Labor Summary").ListBoxes("ListBoxForSlicers").Selected(i)
If CategorySelected Then
Select Case CategoryName
Case "Div 1"
For Each mySheet In Worksheets
Select Case mySheet.Name
Case "Cost Overview", "Project Eng.", "Mfg Development", "Labor Summary", "S.O.P.", "MFGD Time", "MFGD Group", "HowTo", ChrW(&H21BB)
'These sheets are always visible, so do nothing
Case "MFGC", "CUT", "ASSM", "HOT MELT", "POT", "MOLD", "POST-OP", "MARK", "PACK", "PPRNT", "TEST"
'These sheets ought to be visible, so do nothing
Case Else
mySheet.Visible = xlSheetHidden
End Select
Next
Case "Div 2"
For Each mySheet In Worksheets
Select Case mySheet.Name
Case "Cost Overview", "Project Eng.", "Mfg Development", "Labor Summary", "S.O.P.", "MFGD Time", "MFGD Group", "HowTo", ChrW(&H21BB)
'These sheets are always visible, so do nothing
Case "CUT", "ASSM", "TEST", "POST-OP", "PACK"
'These sheets ought to be visible, so do nothing
Case Else
mySheet.Visible = xlSheetHidden
End Select
Next
End Select
End If
Next
Application.ScreenUpdating = True
ここで唯一の問題は、各ループに 'Application.Wait(Now) 'を追加するよりも、処理が必要なタブの数が増えることです。私は答えは分かりませんが、どの問題が解決しているかがはっきりしているので、あなたの解決策が気に入っています。コンピュータがどれほど遅い(または速い)に関係なく動作しなければなりません。 –