勾选时获取复选框的单元格地址

问题描述

您好,我正在使用 Excel VBA,它会为我提供我现在勾选的复选框的单元格地址。我可以使用以下代码获取单元格地址。

Sub test()

    Dim ws As Worksheet
    Set ws = Sheets("Sheet 1")
    Dim chk As CheckBox

For Each chk In ws.CheckBoxes
          Debug.Print chk.TopLeftCell.Offset(0,0).Address
Next chk

End Sub

代码返回所有复选框的单元格地址,但我只想要我勾选的复选框的一个单元格地址。我怎样才能做到这一点。
目前我正在尝试通过活动来实现这一目标,但到目前为止还没有成功。

解决方法

请使用下一种方式:

  1. 复制标准模块中的下一个 Sub:
Sub GetChkBoxAddress()
  MsgBox ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
End Sub
  1. 也复制下一个代码并运行它:
Sub textAssignMacroChkBox()
  Dim sh As Worksheet,s As Shape,chkB As CheckBox
  
  Set sh = ActiveSheet
  For Each s In sh.Shapes
     If TypeName(s.OLEFormat.Object) = "CheckBox" Then
        s.OnAction = "GetChkBoxAddress"
     End If
  Next
End Sub
  1. 尝试选中和取消选中复选框...

如果你只需要在复选框被选中(不是取消选中)时才返回单元格地址,则可以修改代码...

已编辑:

为了检索单元格地址仅用于检查,您可以使用下一个改编的Sub

Sub GetChkBoxAddress()
 If ActiveSheet.Shapes(Application.Caller).OLEFormat.Object.Value = 1 Then
    MsgBox ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
 End If
End Sub