我已经通过 VBA Access 打开了一个 Excel 文件,并且可以在 Excel 单元格中读写。如何勾选 Excel Ckeck 框?
我的代码:
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
最佳答案
复选框属于特定 Worksheet
上的特定集合.这是哪个集合,取决于您要查找的控件类型。
您的代码写得好像复选框属于 Excel.Application
对象 - 那行不通。
首先,您需要保留对 Workbook
的引用。你正在打开的对象,所以不是这个:
Excel_App.Workbooks.Open fready
你需要这个:
Dim book As Object ' early-bound: As Excel.Workbook
Set book = Excel_App.Workbooks.Open(fready)
如果您不知道要在哪个工作表上找到复选框,则必须迭代工作簿的
Worksheets
收藏:Dim sheet As Object ' early-bound: As Excel.Worksheet
For Each sheet In book.Worksheets
'todo
Next
表单控件
所以我们正在寻找
CheckBox
表格控制。我们会在工作表的 Shapes
中找到它。集合,当它的Type
时,我们就会知道我们正在查看一个表单控件。是 msoFormControl
;当它的FormControlType
时,我们就会知道它是一个复选框控件。属性(property)返回 xlCheckBox
: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
是一个复选框表单控件。 Value
可通过 ControlFormat
Access 对象/属性,因此您可以设置名为 Check Box 1
的复选框的值(这是默认名称)像这样:If shp.Name = "Check Box 1" Then
shp.ControlFormat.Value = 1 'checked
End If
当然,如果您已经知道要查找的特定工作表,则无需全部迭代。
ActiveX 控件
如果控件是 ActiveX 控件,那就完全不同了。您可以在
OLEObjects
中找到它集合,其中包含 OLEObject
具有 Object
的实例返回 MSForms.CheckBox
的属性目的;您可以从 OLEObject.ShapeRange.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
注意早绑定(bind)
TypeOf ctrl.Object Is MSForms.CheckBox
check 比后期绑定(bind)的 TypeName
更加稳健查看。您需要通过 Tools > References 引用 MSForms 类型库才能使用它(如果您的 VBA 项目有任何 UserForm
组件,它已经被引用,在这种情况下,早期绑定(bind)代码是不费吹灰之力的)。
关于excel - 如何从 VBA Access 中勾选 Excel 复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46003167/