Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 勾选时获取复选框的单元格地址_Excel_Vba_Excel 2016_Vba7 - Fatal编程技术网

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

Excel 勾选时获取复选框的单元格地址,excel,vba,excel-2016,vba7,Excel,Vba,Excel 2016,Vba7,Hy,我正在使用Excel VBA,它将为我获取当前选中复选框的单元格地址。我可以使用以下代码获取手机地址 子测试() 将ws设置为工作表 设置ws=工作表(“工作表1”) Dim chk As复选框 对于ws.中的每个chk复选框 Debug.Print chk.TopLeftCell.Offset(0,0).Address 下一个chk 端接头 这段代码返回所有复选框的单元格地址,但我只需要选中复选框的一个单元格地址。我怎样才能做到这一点目前我正在尝试实现这一目标,但迄今为止没有成功。请使

Hy,我正在使用Excel VBA,它将为我获取当前选中复选框的单元格地址。我可以使用以下代码获取手机地址

子测试()
将ws设置为工作表
设置ws=工作表(“工作表1”)
Dim chk As复选框
对于ws.中的每个chk复选框
Debug.Print chk.TopLeftCell.Offset(0,0).Address
下一个chk
端接头

这段代码返回所有复选框的单元格地址,但我只需要选中复选框的一个单元格地址。我怎样才能做到这一点
目前我正在尝试实现这一目标,但迄今为止没有成功。

请使用下一种方法:

  • 复制标准模块中的下一个子模块:
  • 也复制下一个代码并运行它:
  • 尝试选中并取消选中复选框
  • 如果您只需要在选中复选框时返回单元格地址(而不是取消选中),则可以调整代码

    编辑:

    为了检索仅用于检查的单元格地址,您可以使用下一个调整的
    子项

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

    我认为这可能通过启用复选框上的单击事件来解决,但我找不到如何在所有复选框上启用单击事件-boxes@Warcupine我如何将_changeevent添加到所有复选框中,因为我没有所有复选框的名称,并且复选框的数量可能会更改。看起来您的复选框属于工作表形式。是否正确?我不确定您有什么类型的复选框或它们是如何创建的,但您可以使用
    .onaction
    设置命令是的,我有表单复选框。我从Developer->Insert->Form Control->Check Box创建了它们。这是一个很好的解决方案,但并不适合当前的情况,如果我以后必须添加新的复选框,该怎么办?@abdulsamad:您只需再次运行
    textAssignMacroChkBox
    ,它就会将相同的宏分配给所有现有的宏。。。这不是很方便吗?是的,我将在Workbook_Open事件中添加它,以便它自动将宏添加到所有复选框中。但完美的解决方案是使用运行相同代码的复选框单击事件。@abdulsamad:恐怕您对我的代码一无所知。这就是它的作用!它指定相同的宏,能够识别工作表中所有现有复选框的已单击复选框。。。您可以使用Workbook_Open事件,但如您所说,如果添加新复选框,则必须运行代码。我已经了解了代码中的所有内容,但我不想每次创建新复选框时都反复运行相同的代码,这就是我试图找到使用click event的完美解决方案的原因。
    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
    
    Sub GetChkBoxAddress()
     If ActiveSheet.Shapes(Application.Caller).OLEFormat.Object.Value = 1 Then
        MsgBox ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
     End If
    End Sub