2016-06-09 101 views
1

我在Excel 2013中有一個用戶窗體,在操作之前清理用戶的Excel頁面。公共模塊具有以下VBA代碼:在Excel VBA中隱藏非活動工作表

Sub ShowForm() 
    With ActiveWorkbook 
     .Worksheets("Sheet1").Activate 
     .Worksheets("Sheet2").Visible = False 'Hide didn't work 
     .Worksheets("Sheet3").Visible = False 'Hide didn't work 
    End With 

    UserForm1.Show 
End Sub 

如何隱藏工作表2和3,激活或使工作表1中可見?代碼應該模仿右鍵單擊選項卡並選擇「隱藏」。以上代碼將引發Run-time error '9': Subscript out of range

+2

然後'ActiveWorkbook'指向具有工作簿僅1(如果'.Worksheets(2)...'錯誤)或2(如果'.Worksheets(3)...'錯誤)的工作表。在即時窗口中查詢「ActiveWorkbook.Name」以知道您實際指向哪個工作簿。但最好使用'With Workbooks(「MyWorkbookName」)'並確保你正在處理想要的工作簿 – user3598756

+0

我嘗試使用'With Workbooks ... End With'並得到相同的'Run-time error'9' :下標越界.'。我還使用了立即窗口來確定當前的「ActiveWorkbook.Name」。我正在使用正確的ActiveWorkbook。 – Andy

+0

我看到你編輯過,現在使用'.Worksheets(「Sheet 2」)'(和類似的)。所以現在的要點是,你的'Workbooks(「MyWorkbookName」)'實際上是否有以'Sheet 1'命名的工作表(如果有.Worksheets(「Sheet 1」)錯誤)或者「Sheet 3」 '.Worksheets(「Sheet 3」)'錯誤)。哪條線出錯? – user3598756

回答

0

看起來像隱藏除活動工作表之外的所有內容。試試這個代碼 - 它不依賴於表單名稱。

Sub Test() 

    SheetVisibility 'Hide all except active sheet. 

    MsgBox "All except `" & ActiveSheet.Name & "` hidden." 

    SheetVisibility True 'Unhide all sheets. 

End Sub 

Sub SheetVisibility(Optional ShowAll As Boolean = False) 

    Dim wrkSht As Worksheet 

    For Each wrkSht In ThisWorkbook.Worksheets 
     If wrkSht.Name <> ActiveSheet.Name Then 
      wrkSht.Visible = IIf(ShowAll, xlSheetVisible, xlSheetHidden) 
     End If 
    Next wrkSht 

End Sub