繁体   English   中英

如何使用变量名称在工作表上引用控件对象?

[英]How do I refer to a controls object, on a worksheet, using a variable name?

我已将列表框添加到工作表(而不是“用户窗体”)中,我使用鼠标进行了此操作。 我点击了小锤子和扳手图标。

这个 ListBox 似乎很容易使用如下代码引用:

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,但这也不起作用......

虽然可能是我对 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一样调用它,这样如果您最终得到多个带有多个列表框的工作表,您就不会感到困惑。 此外,您可能想更改名称只是为了让自己更轻松。

Dim controlName As OLEObject
    Set controlName = Sheet1.OLEObjects("ListBox1")

Call populate_listbox(controlName, designAreaArray)

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

要访问 Sheet1 上复选框 Active-X 控件的状态:

Dim checkBox1 As Object
Set checkBox1 = Sheet1.OLEObjects("CheckBox1").Object
MsgBox checkBox1.Value

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM