2017-08-25 77 views
3

我有下面的代码应该为它旁边的listobject中的每一行添加一个复选框。我想开发一个批准工具,它从数据库加载数据并将其加载到listobject中。之后,我可以通过复选框批准或拒登数据并保存更改。由于listobject会有更改长度,所以需要通过代码添加和删除复选框。什么类型的电子表格复选框在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”,我总是将我的变量调暗到正确的类型,我不想使用变体类型。

+1

窗体控件或ActiveX控件? –

回答

3

一个形式控制复选框会是一个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 
+0

你的解决方案的工作原理,当我试图将CheckBox添加到我的集合中时,我得到了另一个问题::错误91对象或变量未定义。任何想法在那里可能是错的? –

+0

@LucasRaphaelPianegonda看着你的'CBcollection.Add'调用,你在对象引用周围有多余的括号,这对于VBA来说意味着“将该表达式作为一个值进行评估,*并将结果传递给ByVal' *” - 这不是一件好事处理对象引用时的想法(将其评估为值不可能最终结束)。删除多余的括号,你会解决这个问题。 –

0

这只是Checkbox - 你不需要任何资格。

如果它在你的电子表格寿,这可能是它被定义为Object

+1

这不是......嵌入式控件是'OLEObject','Checkbox' *是*在MSForms类型库中定义的,是否合格。 –

0

OLEObjects.Add回报OLEObject一个ActiveX复选框,这样声明的变量是这样的:

Dim CB As OLEObject 
+0

如果我使用OLEObject它不会给我错误13类型错配但给我错误438:对象不支持属性或方法..任何想法如何解决这个问题? –

+0

@LucasRaphaelPianegonda看到我的回答 –

+0

啊,打我吧! –

相关问题