excel - 使用 VBA 代码在多行上启用复选框
问题描述
在此处输入图像描述我有一个电子表格,其中每行有 3 个复选框选项,我创建了一个 VBA 以在创建复选框后禁用其他 2 个复选框(因此只能选中 1 个复选框),但是我的解决方案仅适用于一行,我需要一些帮助来重写它,以便它适用于所有行。(我是 VBA 新手)。
我使用的代码是这样的:
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
CheckBox2.Value = False
CheckBox2.Enabled = False
CheckBox3.Value = False
CheckBox3.Enabled = False
Else
CheckBox2.Value = False
CheckBox2.Enabled = True
CheckBox3.Value = False
CheckBox3.Enabled = True
End If
End Sub
Private Sub CheckBox2_Click()
If CheckBox2.Value = True Then
CheckBox1.Value = False
CheckBox1.Enabled = False
CheckBox3.Value = False
CheckBox3.Enabled = False
Else
CheckBox1.Value = False
CheckBox1.Enabled = True
CheckBox3.Value = False
CheckBox3.Enabled = True
End If
End Sub
Private Sub CheckBox3_Click()
If CheckBox3.Value = True Then
CheckBox1.Value = False
CheckBox1.Enabled = False
CheckBox2.Value = False
CheckBox2.Enabled = False
Else
CheckBox1.Value = False
CheckBox1.Enabled = True
CheckBox2.Value = False
CheckBox2.Enabled = True
End If
End Sub
解决方案
您可能应该只使用 Radios 它会简单得多。
如果您打算这样做,则需要删除所有框,然后输入此代码。它将创建并命名您的框并在单击时为其分配代码。
好的,这需要进入您的工作表模块:
Sub Worksheet_Activate()
'Change Module2 to whatever the module name you are using is.
Module2.ActivateCheckBoxes ActiveSheet
End Sub
接下来的内容将进入您从工作表模块引用的模块。
Sub ActivateCheckBoxes(sht As Worksheet)
If sht.CheckBoxes.Count = 0 Then
CreateCheckBoxes sht
End If
Dim cb As CheckBox
For Each cb In sht.CheckBoxes
'You may be able to pass sht as an object, It was giving me grief though
cb.OnAction = "'Module2.CheckBoxClick """ & cb.name & """, """ & sht.name & """'"
Next cb
End Sub
Sub CreateCheckBoxes(sht As Worksheet)
Dim cell As Range
Dim chkbox As CheckBox
With sht
Dim i As Long
Dim prevrow As Long
prevrow = 0
For Each cell In .Range("B2:D5") 'Change this to whatever range you want.
If prevrow < cell.row Then
prevrow = cell.row
i = 0
End If
Set chkbox = .CheckBoxes.Add(cell.Left, cell.Top, 30, 6)
With chkbox
.name = "CheckBox" & i & "_" & cell.row
.Caption = ""
End With
i = i + 1
Next cell
End With
End Sub
Sub CheckBoxClick(chkname As String, sht As String)
Dim cb As CheckBox
With Worksheets(sht)
For Each cb In .CheckBoxes
If Split(cb.name, "_")(1) Like Split(chkname, "_")(1) And Not cb.name Like chkname Then
cb.Value = -4146
End If
Next cb
End With
End Sub
推荐阅读
- r - 为什么函数说未使用的参数(FcastTill = FcastTillDate)
- java - 模拟使用其他成员变量设置成员变量的构造函数,这些成员变量的可配置值是从属性文件中读取的
- excel - Excel 在哪里添加清单文件安装到 Mac 上?
- javascript - 更新对象副本更新原始
- azure - Elasticsearch All Shards 在 Azure VM 上具有多个节点的集群上失败
- java - 使用特殊字符拆分字符串并保留它们
- ruby-on-rails - 如何正确推/铲/附加活动记录关系?
- python - pygame midi 读取 PC(程序更改)消息
- javascript - 表单提交后更改 div 高度。django(蟒蛇)
- amazon-web-services - AWS Elastic Beanstalk 将 HTTPS 非 www 重定向到 HTTPS WWW