2017-08-25 112 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

啊,打我吧! –

相關問題