[英]How to refer to ActiveX checkboxes on another worksheet by name within a variable
[英]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.