vba 中哪种类型有电子表格复选框?
What type has a spreadsheet checkbox in vba?
我有以下代码,它应该为旁边的列表对象中的每一行添加一个复选框。我想开发一个审批工具,它从数据库中加载数据并将其加载到列表对象中。之后,我可以使用复选框批准或不批准数据并保存更改。由于列表对象的长度会发生变化,因此需要通过代码添加和删除复选框。
这里是代码:
Sub Approval()
Dim i As Integer
Dim tbl As ListObject
Dim CBcollection As Collection
Dim CB As msforms.CheckBox ' THIS IS WRONG
Dim sht As Worksheet
Dim L As Double, T As Double, H As Double, W As Double
Dim rng As Range
Set sht = Tabelle1
Set tbl = sht.ListObjects("ApprovalTBL")
Set rng = tbl.Range(2, 1).Offset(0, -1)
W = 10
H = 10
L = rng.Left + rng.Width / 2 - W / 2
T = rng.Top + rng.Height / 2 - H / 2
For i = 1 To tbl.ListRows.Count
Set CB = sht.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, DisplayAsIcon:=False, Left:=L, Top:=T, Width:=W, Height:=H)
'the line before will give me an error 13 type missmatch
CBcollection.Add (CB)
Set rng = rng.Offset(-1, 0)
T = rng.Top + rng.Height / 2 - H / 2
Next i
End Sub
现在问题:
普通电子表格中的复选框是什么类型的?
我总是使用 "Option Explicit",我总是将我的变量变暗为正确的类型,我不想使用变体类型。
它只是 Checkbox
- 你不需要用任何东西来限定它。
如果它在您的电子表格中,那可能是一个定义为 Object
的 ActiveX 复选框
OLEObjects.Add
returns OLEObject
,所以像这样声明你的变量:
Dim CB As OLEObject
一个 表单控件 复选框将是一个 Shape
,但你这里没有。
在工作表上添加 ActiveX 复选框会添加对 MSForms
类型库的引用(就像向 VBA 项目添加 UserForm
一样)。
复选框确实是一个 MSForms.Checkbox
实例,但要存在于工作表中,它嵌入 OLEObject
,一种存在于 Excel
类型库。
因此,要获得 MSForms.Checkbox
,您需要检索 OLEObject.Object
参考:
Dim ctrl As Excel.OLEObject
Set ctrl = sht.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, DisplayAsIcon:=False, Left:=L, Top:=T, Width:=W, Height:=H)
Dim chkBox As MSForms.CheckBox
Set chkBox = ctrl.Object
我有以下代码,它应该为旁边的列表对象中的每一行添加一个复选框。我想开发一个审批工具,它从数据库中加载数据并将其加载到列表对象中。之后,我可以使用复选框批准或不批准数据并保存更改。由于列表对象的长度会发生变化,因此需要通过代码添加和删除复选框。
这里是代码:
Sub Approval()
Dim i As Integer
Dim tbl As ListObject
Dim CBcollection As Collection
Dim CB As msforms.CheckBox ' THIS IS WRONG
Dim sht As Worksheet
Dim L As Double, T As Double, H As Double, W As Double
Dim rng As Range
Set sht = Tabelle1
Set tbl = sht.ListObjects("ApprovalTBL")
Set rng = tbl.Range(2, 1).Offset(0, -1)
W = 10
H = 10
L = rng.Left + rng.Width / 2 - W / 2
T = rng.Top + rng.Height / 2 - H / 2
For i = 1 To tbl.ListRows.Count
Set CB = sht.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, DisplayAsIcon:=False, Left:=L, Top:=T, Width:=W, Height:=H)
'the line before will give me an error 13 type missmatch
CBcollection.Add (CB)
Set rng = rng.Offset(-1, 0)
T = rng.Top + rng.Height / 2 - H / 2
Next i
End Sub
现在问题:
普通电子表格中的复选框是什么类型的?
我总是使用 "Option Explicit",我总是将我的变量变暗为正确的类型,我不想使用变体类型。
它只是 Checkbox
- 你不需要用任何东西来限定它。
如果它在您的电子表格中,那可能是一个定义为 Object
OLEObjects.Add
returns OLEObject
,所以像这样声明你的变量:
Dim CB As OLEObject
一个 表单控件 复选框将是一个 Shape
,但你这里没有。
在工作表上添加 ActiveX 复选框会添加对 MSForms
类型库的引用(就像向 VBA 项目添加 UserForm
一样)。
复选框确实是一个 MSForms.Checkbox
实例,但要存在于工作表中,它嵌入 OLEObject
,一种存在于 Excel
类型库。
因此,要获得 MSForms.Checkbox
,您需要检索 OLEObject.Object
参考:
Dim ctrl As Excel.OLEObject
Set ctrl = sht.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, DisplayAsIcon:=False, Left:=L, Top:=T, Width:=W, Height:=H)
Dim chkBox As MSForms.CheckBox
Set chkBox = ctrl.Object