如何从VBA Access中勾选Excel复选框
我已经通过VBA Access打开了Excel文件,可以在Excel单元格中读写。如何在Excel复选框中打勾 我的代码:如何从VBA Access中勾选Excel复选框,excel,vba,ms-access,checkbox,Excel,Vba,Ms Access,Checkbox,我已经通过VBA Access打开了Excel文件,可以在Excel单元格中读写。如何在Excel复选框中打勾 我的代码: Dim Excel_App As Object Dim strExcel As String Set Excel_App = CreateObject("Excel.Application") Excel_App.Visible = True Excel_App.Workbooks.Open fready With Excel_App .CheckBox3.Val
Dim Excel_App As Object
Dim strExcel As String
Set Excel_App = CreateObject("Excel.Application")
Excel_App.Visible = True
Excel_App.Workbooks.Open fready
With Excel_App
.CheckBox3.Value = True 'This line is used in VBA Excel and I need in Access
End With
复选框属于特定
工作表上的特定集合。这是哪个集合,取决于您要查找的控件类型
您的代码编写时,就好像复选框属于Excel.Application
对象一样-这无法工作
首先,您需要保留对正在打开的工作簿
对象的引用,因此:
你需要这个:
Dim book As Object ' early-bound: As Excel.Workbook
Set book = Excel_App.Workbooks.Open(fready)
如果不知道要在哪个工作表上找到复选框,则必须迭代工作簿的工作表
集合:
Dim sheet As Object ' early-bound: As Excel.Worksheet
For Each sheet In book.Worksheets
'todo
Next
窗体控件
因此,我们正在寻找一个复选框
表单控件。我们会在表单的形状
集合中找到它,当表单控件的类型
为msoFormControl
时,我们就会知道我们正在查看表单控件;当它的FormControlType
属性返回xlCheckBox
时,我们就知道它是一个checkbox控件:
Dim sheet As Object ' early-bound: As Excel.Worksheet
For Each sheet In book.Worksheets
Dim shp As Object ' early-bound: As Excel.Shape
For Each shp In sheet.Shapes
If shp.Type = 8 ' early-bound: msoFormControl
If shp.FormControlType = 1 ' early-bound: xlCheckBox
'todo
End If
End If
Next
Next
现在我们知道shp
是一个复选框表单控件。值
可通过控制格式
对象/属性访问,因此您可以设置名为复选框1(默认名称)的复选框的值,如下所示:
If shp.Name = "Check Box 1" Then
shp.ControlFormat.Value = 1 'checked
End If
当然,如果您已经知道要查找哪一张特定的工作表,则无需对它们全部进行迭代
ActiveX控件
如果控件是ActiveX控件,那就完全不同了;您可以在OLEObjects
集合中找到它,该集合包含OLEObject
实例,这些实例具有一个Object
属性,该属性返回MSForms.CheckBox
对象;您可以从OLEObject.shaperage.name
中获取复选框的名称:
Dim ctrl As Object ' early-bound: As Excel.OLEObject
For Each ctrl In sheet.OLEObjects
If TypeName(ctrl.Object) = "CheckBox" Then ' early-bound: If TypeOf ctrl.Object Is MSForms.CheckBox Then
If ctrl.ShapeRange.Name = "CheckBox1" Then
ctrl.Object.Value = True ' checked
End If
End If
Next
注意,ctrl.Object的早期绑定types是MSForms.CheckBox
check比后期绑定TypeName
check更健壮。您需要通过工具>引用引用MSForms类型库来使用它(如果您的VBA项目有任何UserForm
组件,那么它已经被引用了,在这种情况下,早期绑定代码是不需要动脑筋的)。复选框不属于Excel.Application
实例。它甚至不属于您打开(并丢弃)的工作簿
实例;如果您正在寻找ActiveX或Office Forms控件,首先需要知道的是。您将在工作表的OleObjects
集合中找到ActiveX控件,在Shapes
集合中找到Office Forms控件(不过您也将在其中找到嵌入式ActiveX控件的形状)。您还需要知道该复选框的名称谢谢,复选框类型是Office Forms。我在链接中找不到代码。我在Excel中尝试了Shape.CheckBox3.Value=True。应用程序实例中说的是“object required”。非常好的解释@戴维哲门斯谢谢!只是一个巧合,不迟于昨晚,我正在努力让Rubberduck了解表单和ActiveX文档控件,这样我们就可以最终停止那个令人讨厌的假阳性检查结果,声称“程序“Button1_Click”从未使用过”。Mat的杯子,它工作得很好,非常感谢您的大力帮助。
Dim ctrl As Object ' early-bound: As Excel.OLEObject
For Each ctrl In sheet.OLEObjects
If TypeName(ctrl.Object) = "CheckBox" Then ' early-bound: If TypeOf ctrl.Object Is MSForms.CheckBox Then
If ctrl.ShapeRange.Name = "CheckBox1" Then
ctrl.Object.Value = True ' checked
End If
End If
Next