簡體   English   中英

如何在Excel中使用復選框隱藏或取消隱藏多個工作表

[英]How to Hide or Unhide Multiple Worksheets with a Checkbox in excel

我正在工作簿中有10個工作表。 我有主頁Sheet10,我想在其中放置復選框以根據選擇哪個復選框來隱藏/取消隱藏其他工作表。 我將所有其他工作表都設置為“非常隱藏”。當我進入工作簿時,此工作表應該是唯一可見的工作表。 然后,一旦我選中“復選框”之一,它就會取消隱藏相關的工作表。 取消選中時,將隱藏這些工作表。 當我進入工作簿時,一切都會顯示,它隱藏了未分配給我所選擇的復選框的工作表。 當我取消選中復選框時,一切都會顯示。

我添加了代碼來隱藏和顯示工作表,但是它沒有按預期工作。 它只是隱藏工作表,沒有像我想的那樣隱藏隱藏的表。 我將所有其他工作表列為“非常隱藏”。 另外,如果我同時單擊兩個按鈕,它會變得很時髦並且沒有顯示正確的工作表

EDIT1我在宏模塊中添加了以下代碼。 我在If ctrl區域顯示多張紙時出現錯誤。 當我單擊帶有宏的選項按鈕時,它給了我一個編譯錯誤,我肯定在這里錯過了一些東西。

選項按鈕和宏

Sub Hide_Sheets()

    Select Case ctrl.Name
        Case "Option Button 1"
            If ctrl.ControlFormat.Value = 1 Then nohide = Array("Sheet2", "Sheet4", "Sheet5, "Sheet7", "Sheet9", "Sheet12")
        Case "Option Button 2"
            If ctrl.ControlFormat.Value = 1 Then nohide = Array("Sheet2", "Sheet3", "Sheet4", "Sheet5, "Sheet7", "Sheet9", "Sheet12", "Sheet14")
        Case "Option Button 3"
            If ctrl.ControlFormat.Value = 1 Then nohide = Array("Sheet13")
    End Select

編輯2單擊選項按鈕之一時,出現以下錯誤。 我發現我錯過了一個問題。

宏代碼錯誤

編輯3下面是我要嘗試顯示和隱藏工作表的唯一代碼。 它在我的宏模塊中。 前后反復,我不確定是否有我現在需要的東西。 我在(If ctrl.FormControlType =)遇到調試錯誤。 因此,我發生了嚴重錯誤。 補充一注。 我無法取消選擇任何選項按鈕,因此未選中它們。

Sub Hide_Sheets()
    Dim ctrl As Shape, nohide As Variant
    For Each ctrl In Sheets(1).Shapes
        If ctrl.FormControlType = xlOptionButton Then
            Select Case ctrl.Name
                Case "Option Button 1"
                    If ctrl.ControlFormat.Value = 1 Then nohide = Array("Sheet2", "Sheet4", "Sheet5", "Sheet7", "Sheet9", "Sheet12")
                Case "Option Button 2"
                    If ctrl.ControlFormat.Value = 1 Then nohide = Array("Sheet2", "Sheet3", "Sheet4", "Sheet5", "Sheet7", "Sheet9", "Sheet12", "Sheet14")
                Case "Option Button 3"
                    If ctrl.ControlFormat.Value = 1 Then nohide = Array("Sheet13")
            End Select
        End If
    Next ctrl

    If Not IsEmpty(nohide) Then
        Dim ws As Worksheet
        For Each ws In Worksheets
             If IsError(Application.Match(ws.Name, nohide, 0)) Then
                 ws.Visible = False
            Else
                ws.Visible = True
            End If
        Next ws
        nohide = ""
End If

End Sub

我想要的是一個工作簿,當我進入該工作簿時,當我單擊其中一個復選框時,它會顯示或隱藏相關的工作表。 我想如果您選擇多個按鈕以將那些相關的工作表添加到可見。 如果取消選中所有框,則全部“隱藏”。

我將為此推薦選項按鈕,因為它會更容易一些,因為工作表上的按鈕會自動鏈接,並且一次只能選擇一個(在多個單擊的復選框上保存錯誤處理)

所有按鈕都檢查到同一個宏,您可以在其中循環瀏覽工作表上的形狀,以確定選擇哪些內容以指定要顯示的工作表(示例代碼):

Dim ctrl As Shape, nohide As Variant
For Each ctrl In Sheets(1).Shapes
    If ctrl.FormControlType = xlOptionButton Then
        Select Case ctrl.Name
            Case "Option Button 1"
                If ctrl.ControlFormat.Value = 1 Then nohide = Array("Sheet1")    
        End Select
    End If
Next ctrl

然后遍歷工作表以根據可見列表隱藏:

If Not IsEmpty(nohide) Then
    Dim ws As Worksheet
    For Each ws In Worksheets
        If IsError(Application.Match(ws.Name, nohide, 0)) Then
            ws.Visible = False
        Else
            ws.Visible = True
        End If
    Next ws
    nohide = ""
End If

編輯1:

確保您使用的是窗體控件,而不是activeX或用戶窗體上的控件...這是選擇與上述語法關聯的選項按鈕的方式:

在此處輸入圖片說明

與擁有一個宏有關,目的是在vba中使用一個開關Select Case 。一個開關的工作原理是驗證每個開關場景,並在滿足該條件的情況下執行該開關。 對於VBA,您正在選擇要使用的案例 這是多個按鈕的示例:

    Select Case ctrl.Name
        Case "Option Button 1"
            If ctrl.ControlFormat.Value = 1 Then nohide = Array("Sheet1") 
        Case "Option Button 2"
            If ctrl.ControlFormat.Value = 1 Then nohide = Array("Sheet1","Sheet2") 
    End Select

請注意,將評估每種情況,因此,當您進入工作表中的下一個ctrl時,可能是選項按鈕2,因此將評估這種情況,但是if語句將失敗,並且nohide仍然是在其中分配的內容。第一種情況是對的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM