我正在一个有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
我想要的是一本工作簿,当我进入该工作簿时,当我单击其中一个复选框时,它会显示或隐藏相关的工作表。我想如果您选择多个按钮以将那些相关的工作表添加到可见。取消选中所有复选框后,全部“隐藏”。
答案 0 :(得分:0)
我将为此推荐选项按钮,因为它会更容易一些,因为工作表上的按钮会自动链接,并且一次只能选择一个(在多个单击的复选框上节省错误处理)
所有按钮都选中了同一宏,您可以在该宏上循环浏览图纸上的形状,以确定所选择的内容以指定哪些图纸可见(示例代码):
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,您选择要使用的 Case 。这是多个按钮的示例:
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语句将失败,并且{ {1}}仍然是第一种情况下分配的值,这是事实。