【发布时间】:2020-05-20 01:08:47
【问题描述】:
我有多个复选框(表单控件)位于同一张表中。当我单击任何复选框时,我需要它隐藏指定的行范围和 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"'
任何帮助将不胜感激!
【问题讨论】:
-
您实际上尝试分配宏的代码是什么?将参数与
OnAction一起使用并不是一个好主意,因此最好在复选框名称中包含某些内容,或者使用查找表。 -
我尝试将子“隐藏”分配给所有复选框。对于每个复选框,我希望在分配宏时能够修改行范围、SB1 和 SB2。我已经多次看到这种类型的建议出现:'NameOfMacro "variable1", "variable2"'。不幸的是,似乎对我不起作用。
-
典型的方法包括给每个复选框一个特定的名称,该名称可用于确定要操作的项目 - 您可以在通用宏中硬编码这些或使用(例如)一个查找表一个隐藏的工作表,从复选框名称中获取他们的名字。