我目前正在处理一行代码,将复选框放在Excel的A列的每一行中(每行都在A1之外,所以它从A2开始)。这些复选框与它们的相邻列B相连,在该列中放置了正确或错误的数据。
现在我的目标是: 如果B列(由复选框确定)为true,则将复选框行位置单元格C的值复制到复选框行位置单元格D。如果不正确,则必须在目标单元格(D)中放置一个0。
一旦选中一个复选框,就会激活该行的vba。 我当前的代码是:
Sub TrueFalse()
If Range("B" & ActiveRow).Value = True Then
MsgBox "True"
ElseIf Range("B" & ActiveRow).Value = False Then
MsgBox "False"
End If
End Sub
我知道“ ActiveRow”不起作用,但这是为了显示行检查应该在哪里。
希望有人可以提供帮助,谢谢!
答案 0 :(得分:0)
如果复选框通过单元格链接连接,即Format Control | Control Tab | Cell Link
,则可以使用来获取相关复选框的行
Sub TrueFalse()
Debug.Print Range(ActiveSheet.CheckBoxes(Application.Caller).LinkedCell).Row
End Sub
因此您的代码变为
Sub TrueFalse()
Dim ActiveRow As Long
ActiveRow = Range(ActiveSheet.CheckBoxes(Application.Caller).LinkedCell).Row
If Range("B" & ActiveRow).Value = True Then
MsgBox "True"
ElseIf Range("B" & ActiveRow).Value = False Then
MsgBox "False"
End If
End Sub
修改
您还可以更改以上内容以使其工作
Sub TrueFalse()
Dim CellAddress As String
CellAddress = ActiveSheet.CheckBoxes(Application.Caller).LinkedCell
If Range(CellAddress).Value = True Then
MsgBox "True"
ElseIf Range(CellAddress).Value = False Then
MsgBox "False"
End If
End Sub
答案 1 :(得分:0)
我不清楚您以这种方式使用复选框的原因吗?
您可以使用数据输入验证来实现类似的目的,并避免为复选框使用表单的麻烦。
例如只允许在单元格A2:A99的范围内使用两个值(例如“ Y”或“ N”),或者可能只允许一个值和一个空单元格(例如“ X”或空白)。然后使用VBA检测数据输入到“ A”列中,并使用与活动单元格相对的偏移量来完成工作,例如
if Activecell.value="X" Then
Activecell.offset(0,1) = "whatever you want to write to the cell right of the checked cell"
这是您要尝试做的事情吗?