2012-01-19 64 views
6

我已經添加了一個列表框到一個SHEET(而不是「UserForm」) 我用鼠標做了這個。 我點擊了小錘子和扳手圖標。如何使用變量名稱在工作表上引用控件對象?

此列表框似乎使用代碼,因爲這很容易引用:

ListBox1.Clear 

ListBox1.AddItem("An option") 

不過,我有這三個列表框的(命名,方便,ListBox1中,ListBox2,和ListBox3),我想寫一個函數來填充他們的數組數據,像這樣:

Call populate_listbox(ListBox2, designAreaArray) 

第一個參數是列表框名稱,第二個是數據。

但我不知道如何正確發送「ListBox2」,或在函數內正確引用它。

例如:

Dim controlName as string 
controlName = "ListBox1" 

不工作,即使我定義函數如下:

Sub populate_listbox(LB As ListBox, dataArray As Variant) 
    Dim i As Integer: i = 0 
    For i = LBound(dataArray, 2) + 1 To UBound(dataArray, 2) ' Skip header row 
     LB.AddItem (dataArray(index, i)) 
    Next i 
End Sub 

顯然它會導致不匹配的數據類型的錯誤。我已經嘗試將「controlName」定義爲列表框,但這也不起作用...

雖然也許它是我對listBox的引用是不正確的。我已經看到很多方法來引用一個控制對象...

MSForms.ListBox. 
ME.ListBox 
Forms.Controls. 
Worksheet.Shapes. 

該名單繼續,並沒有爲我工作。

回答

6

試試這個:

Dim cMyListbox As MSForms.ListBox 

Set cMyListbox = Sheet1.ListBox1 '// OR Worksheets("YourSheetName").Listbox1 

cMyListbox.AddItem("An option") 

您也可以填充一個列表框,而不通過陣列,具有循環,試試這個:

Dim cMyListbox As MSForms.ListBox 
Dim vArray As Variant 

Set cMyListbox = Sheet1.ListBox1 

vArray = Range("A1:A6").Value 
cMyListbox.List = vArray 
+0

謝謝。我按照justnS的回答修改了我的子集,並按照上面所述設置了我的變量(cMyListbox),並且組合起作用了。感謝關於填寫清單的提示。 – Symmitchry 2012-01-19 17:06:16

+0

沒有問題,很高興它爲你工作。 – Reafidy 2012-01-19 19:12:11

3

更改子簽名匹配此:

Sub populate_listbox(LB As MSForms.ListBox, dataArray As Variant)

現在你可以通過它就像你是tryi最初。

注意:這隻適用於如果您使用列表框的「ActiveX」版本。我假設你是因爲你可以直接從模塊調用ListBox1。

PS:ActiveX控件是父窗體對象的成員。所以如果你在sheet1上有listbox1,你也可以把它叫做Sheet1.ListBox1,所以如果你最終得到多個帶有多個列表框的工作表,你不會感到困惑。此外,您可能想更改名稱,以便讓自己更輕鬆。

+0

感謝您的回覆。我根據Reafidy的回答修改了我的變量聲明,並根據你的修改了我的子版本,現在它可以工作。 – Symmitchry 2012-01-19 17:07:28

相關問題