VBA是否可以与未使用VBA的复选框交互



我正在尝试编写一个宏,该宏将从大量现有的excel文件中抓取数据。这些文件的格式相同,只是信息不同。我可以提取写在单元格中的任何数据,即使它是下拉式的。但是,由于复选框没有绑定到单元格区域,我不知道如何在VBA中与它们交互。

我试过使用

? Activesheet.checkbox1.value
? Activesheet.checkbox(1).value

但它没有给我任何东西。

有没有办法参考这些?我猜它们是用";"开发人员"选项卡->插入对象";因此VBA 中的项目树中没有用户窗体区域

谢谢,

尝试以下代码在工作表上查找复选框:

Sub InspectCheckBoxes()
Dim sh As Shape

For Each sh In ActiveSheet.Shapes
Select Case sh.Type ' see MsoShapeType enumeration
Case msoFormControl
If sh.FormControlType = xlCheckBox Then ' see XlFormControl enumeration
Debug.Print "Found CheckBox as FormControl named '" & sh.Name & "' at left "; sh.Left & "; top " & sh.Top
End If
Case msoOLEControlObject
If InStr(1, sh.OLEFormat.progID, "CheckBox", vbTextCompare) > 0 Then
Debug.Print "Found CheckBox as OLEControlObject named '" & sh.Name & "' at left "; sh.Left & "; top " & sh.Top
End If
End Select
Next
End Sub

打印:

Found CheckBox as FormControl named 'Check Box 2' at left 207; top 78
Found CheckBox as OLEControlObject named 'CheckBox1' at left 244,5; top 142,5

您没有指定哪种类型的复选框。。。

Dim cbx As Excel.CheckBox
Dim msfCbx As msforms.CheckBox
Dim ole As OLEObject
Debug.Print "Forms type checkboxes"
For Each cbx In ActiveSheet.CheckBoxes
Debug.Print cbx.Value, cbx.Name, cbx.Caption, cbx.TopLeftCell.Address
Next
Debug.Print "ActiveX checkboxes"
For Each ole In ActiveSheet.OLEObjects
If ole.progID = "Forms.CheckBox.1" Then
Set msfCbx = ole.Object
Debug.Print msfCbx.Value, ole.Name, msfCbx.Caption, ole.TopLeftCell.Address
End If
Next

前面的两个答案都假设您的复选框在工作表上。这两种复选框类型都包含一个"链接单元格"属性,该属性可更改单元格的值。

用户表单上的复选框不能像您所说的那样直接链接到单元格。复选框事件中的代码可以执行某些操作,或者其他代码可能稍后在需要时读取复选框状态,

除非我遗漏了什么,否则您可以通过读取加载的用户表单上的复选框值来检索任何有用的数据的唯一方法是,如果您可以简单地从复选框的名称推断出一些链接的单元格范围。它也可能是用户窗体的initialize事件中的代码,或者可能是"获取数据"类型的按钮,在运行时读取单元格并更新复选框。

如果是这样的话,试试这个-在你的表单中添加一个按钮

Private Sub CommandButton1_Click()
Dim ctl As MSForms.Control
For Each ctl In Me.Controls
If TypeName(ctl) = "CheckBox" Then
Debug.Print ctl.Value, ctl.Name
End If
Next
End Sub

最新更新