首页 > 解决方案 > 将宏分配给多个复选框

问题描述

我有几个复选框(表单控件)位于同一张表中。当我单击任何复选框时,我需要它隐藏指定的行范围和 2 个指定的滚动条。

我最初使用了一个 Active Control Check Box,并编写了这个有效的代码(这专门为 CheckBox1 工作):

Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
[105:112].EntireRow.Hidden = True
ActiveSheet.Shapes("Scroll Bar 79").Visible = False
ActiveSheet.Shapes("Scroll Bar 82").Visible = False

Else: 
[105:112].EntireRow.Hidden = False
ActiveSheet.Shapes("Scroll Bar 79").Visible = True
ActiveSheet.Shapes("Scroll Bar 82").Visible = True
End If
End Sub

但是,我想创建一个更通用的代码,因为我有 60 个这样的复选框(如下所述)。此代码有四个变量:1)复选框名称 2)行范围 3)滚动条 1 4)滚动条 2

对于工作表中的每个复选框,我希望能够更改 4 个变量名称。在将宏分配给每个复选框时,我尝试使用这种格式 'NameOfMacro "variable1", "variable2"',但这并没有奏效!

Sub Hide ()

Dim chkBox As CheckBox
Dim RowRange As Range
Dim SB1 As Shape
Dim SB2 As Shape

Set chkBox = ActiveSheet.CheckBoxes(Application.Caller)

If chkBox.Value = True Then
    [RowRange].EntireRow.Hidden = True
    ActiveSheet.Shapes("SB1").Visible = False
    ActiveSheet.Shapes("SB2").Visible = False
Else:
    [RowRange].EntireRow.Hidden = False
    ActiveSheet.Shapes("SB1").Visible = True
    ActiveSheet.Shapes("SB2").Visible = True
End If
End Sub

我在两个方面遇到了麻烦

1)创建一个通用宏,我得到诸如“无法获取工作表类的复选框属性”之类的错误。如何使复选框名称可变?2) 将相同的宏分配给多个复选框,同时能够使用此方法更改参数:'NameOfMacro "variable1", "variable2"'

任何帮助将不胜感激!

标签: excelvba

解决方案


您需要为您的Hide例程设置一个参数。然后将复选框的值传递给该参数。这会给你你想要的行为。只需为每个复选框制作一个:

Private Sub CheckBox1_Click()
    HideRow CheckBox1.Value, ActiveSheet.Range("A105:A112"), "Scroll Bar 79", "Scroll Bar 82"
End Sub

Public Sub HideRow(ByVal hiding As Boolean, ByVal rowRange As Range, ByVal ScrollBarOne As String, ByVal ScrollBarTwo As String)
    If hiding Then
        rowRange.EntireRow.hidden = True
        ActiveSheet.Shapes(ScrollBarOne).Visible = False
        ActiveSheet.Shapes(ScrollBarTwo).Visible = False
    Else
        rowRange.EntireRow.hidden = False
        ActiveSheet.Shapes(ScrollBarOne).Visible = True
        ActiveSheet.Shapes(ScrollBarTwo).Visible = True
    End If
End Sub

推荐阅读