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