Sup*_*tch 9 excel vba excel-vba
我已经将一个ListBox添加到SHEET(而不是"UserForm")我用鼠标做了这个.我点击了小锤子和扳手图标.
这个ListBox似乎很容易使用如下代码引用:
ListBox1.Clear
Run Code Online (Sandbox Code Playgroud)
要么
ListBox1.AddItem("An option")
Run Code Online (Sandbox Code Playgroud)
但是,我有三个这样的ListBoxes(方便地命名为ListBox1,ListBox2和ListBox3),我想编写一个函数来用数组数据填充它们,如下所示:
Call populate_listbox(ListBox2, designAreaArray)
Run Code Online (Sandbox Code Playgroud)
第一个参数是列表框名称,第二个参数是数据.
但我不知道如何正确发送"ListBox2",或在函数内正确引用它.
例如:
Dim controlName as string
controlName = "ListBox1"
Run Code Online (Sandbox Code Playgroud)
不起作用,即使我定义函数如下:
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
Run Code Online (Sandbox Code Playgroud)
显然,它会导致错误匹配的数据类型错误.我已经尝试将"controlName"定义为ListBox,但这也不起作用......
虽然可能是我对listBox的引用不正确.我已经看到了很多方法来引用控件对象......
MSForms.ListBox.
ME.ListBox
Forms.Controls.
Worksheet.Shapes.
Run Code Online (Sandbox Code Playgroud)
列表继续,没有任何对我有用.
试试这个:
Dim cMyListbox As MSForms.ListBox
Set cMyListbox = Sheet1.ListBox1 '// OR Worksheets("YourSheetName").Listbox1
cMyListbox.AddItem("An option")
Run Code Online (Sandbox Code Playgroud)
您也可以填充列表框而无需遍历数组,请尝试以下操作:
Dim cMyListbox As MSForms.ListBox
Dim vArray As Variant
Set cMyListbox = Sheet1.ListBox1
vArray = Range("A1:A6").Value
cMyListbox.List = vArray
Run Code Online (Sandbox Code Playgroud)