如何使用variables名称在工作表上引用控件对象?
我已经添加一个列表框到SHEET(而不是“UserForm”),我用鼠标做了这个。 我点击了小锤子和扳手图标。
这个ListBox似乎很容易使用这样的代码引用:
ListBox1.Clear
要么
ListBox1.AddItem("An option")
不过,我有三个这些ListBox(方便地命名为ListBox1,ListBox2和ListBox3),我想写一个函数来填充他们的数组数据,像这样:
Call populate_listbox(ListBox2, designAreaArray)
第一个参数是列表框名称,第二个是数据。
但是我不知道如何正确发送“ListBox2”,或者在函数中正确引用它。
例如:
Dim controlName as string controlName = "ListBox1"
不起作用,即使我定义的function如下:
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
很明显,这会导致错误匹配的数据types错误。 我已经尝试将“controlName”定义为一个ListBox,但是这也没有工作…
虽然也许这是我对listBox的引用是不正确的。 我见过很多方法来引用一个控制对象…
MSForms.ListBox. ME.ListBox Forms.Controls. Worksheet.Shapes.
名单继续,并没有任何工作对我来说。
尝试这个:
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
更改子签名以匹配:
Sub populate_listbox(LB As MSForms.ListBox, dataArray As Variant)
现在,你可以像你最初想要的那样通过它。
注意 :这只适用于如果您使用列表框的“ActiveX”版本。 我假设你是因为你可以直接从模块调用ListBox1。
PS:ActiveX控件是父表单对象的成员。 所以,如果你在sheet1上有listbox1,你也可以像调用Sheet1.ListBox1
一样调用它,所以如果你最终得到多个带有多个列表框的工作表,你不会感到困惑。 此外,您可能想要更改名称,以使自己更容易。