簡體   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