vba中有啥类型的电子表格复选框?
Posted
技术标签:
【中文标题】vba中有啥类型的电子表格复选框?【英文标题】:What type has a spreadsheet checkbox in vba?vba中有什么类型的电子表格复选框? 【发布时间】:2018-02-03 15:28:42 【问题描述】:我有以下代码,它应该为旁边的列表对象中的每一行添加一个复选框。我想开发一个审批工具,它从数据库中加载数据并将其加载到列表对象中。之后,我可以使用复选框批准或不批准数据并保存更改。由于列表对象的长度会发生变化,因此需要通过代码添加和删除复选框。
这里是代码:
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”,我总是将变量调暗为正确的类型,我不想使用变体类型。
【问题讨论】:
表单控件还是 ActiveX 控件? 【参考方案1】:表单控件复选框将是 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
【讨论】:
您的解决方案有效,但在尝试将 CheckBox 添加到我的集合时,我又遇到了另一个问题 ::error 91 对象或变量未定义。知道那里可能有什么问题吗? @LucasRaphaelPianegonda 看着你的CBcollection.Add
调用,你在对象引用周围有多余的括号,这对VBA来说意味着“将这个表达式作为一个值来评估,并传递结果ByVal
" - 在处理对象引用时这不是一个好主意(将其评估为一个值不太可能结束)。删除多余的括号,您将解决问题。【参考方案2】:
这只是Checkbox
- 你不需要用任何东西来限定它。
如果它在您的电子表格中,那可能是一个 ActiveX 复选框,定义为 Object
【讨论】:
这不是...嵌入式控件是OLEObject
,而Checkbox
是定义在MSForms
类型库中,无论是否合格。【参考方案3】:
OLEObjects.Add
返回OLEObject
,所以像这样声明你的变量:
Dim CB As OLEObject
【讨论】:
如果我使用 OLEObject,它不会给我错误 13 类型不匹配但给我错误 438:对象不支持属性或方法..知道如何解决这个问题吗? @LucasRaphaelPianegonda 看到我的答案 啊,打败我!以上是关于vba中有啥类型的电子表格复选框?的主要内容,如果未能解决你的问题,请参考以下文章