2015-09-07 94 views
0

是否可以在VBA方法中使用变量?方法和变量

对于例如,我试图项添加到列表:列表框 .AddItem(物品1)

QNS:我是否能够取代 “1” 与varible:列表框& “Varible “ .AddItem(物品1)

Sub ThisWorks() 
Worksheets("Control Sheet").Tx_TgtRaw_FX_CA.AddItem ("Remark1") 
End Sub 
======================= 
Sub test() 
'Trying to use this as a varible instead 
X = "Tx_TgtRaw_FX_CA" 
Worksheets("Control Sheet").X.AddItem ("Remark1") 
'Error 438: Object does not support this property or method 
End Sub 
======================= 
Sub testarr() 
Dim y(0 To 2) 

Set y(0) = "Tx_TgtRaw_FX_CA" 
Worksheets("Control Sheet").y(0).AddItem ("Remark1") 
'Error 438: Object does not support this property or method 
End Sub 
+0

当然,是的。发布一些代码,我们可能能够精确地指出问题所在。 –

+0

嗨马特,谢谢你的回复,你可以看看吗? ============== 子ThisWorks() 工作表( “控制薄片”)。Tx_TgtRaw_FX_CA.AddItem( “备注1”) 结束子 ======= ======= 子testarr() 昏暗Y(0〜2) 集合Y(0)= “Tx_TgtRaw_FX_CA” 工作表( “控制薄片”)。Y(0).AddItem(”备注1" ) 结束子 ============== 子试验() “试图以此为varible代替 X =“Tx_TgtRaw_FX_CA” 工作表(“控制薄板”)X.AddItem(“备注1”) “错误438:对象不支持此属性或方法 结束子 –

回答

1

我不认为任何方式,使用VBA INDIRECT变量名称将是可能的。

一种解决方法是定义数组,并指他们的项目,例如:

Dim ListBoxes(10) as Variable 

Set ListBoxes(1) = ListBox1 
Set ListBoxes(2) = ListBox2 
(instead of preparing the array manually you can 
    also add the items programmatically to the form) 
... 

ListBoxes(i).AddItem(item1) 
+0

伴侣您好,感谢您的回复。 我试过了,但似乎无法让它工作。 我已将我的代码片段添加到我的qns中。 你可以好好看看吗? –

0

你需要循环的控制在适当的容器中,以检查其名称等于您需要的控件名称。即

For Each c in Controls 
    If LCase(c.Name) = LCase("NameOfDesiredControl") Then 
     ... Work with it ... 
    End If 
Next 

这可以很容易地被翻译成一个函数。

0

我不知道你的目标是什么,但以下修改您发布的代码允许它的工作:

Option Explicit 

Sub ThisWorks() 
Worksheets("Control Sheet").Tx_TgtRaw_FX_CA.AddItem ("Remark1") 
End Sub 
'======================= 
Sub test() 
Dim X As Object 
'Trying to use this as a varible instead 
Set X = Worksheets("Control Sheet").Tx_TgtRaw_FX_CA 
X.AddItem ("Remark1") 

End Sub 
'======================= 
Sub testarr() 
Dim y(0 To 2) 

Set y(0) = Worksheets("Control Sheet").Tx_TgtRaw_FX_CA 
y(0).AddItem ("Remarkx") 
End Sub 
+0

嗨罗恩!非常感谢分享!我试图将设置为一个变量,因为我有3个国家的列表框:US,CA&SG 当我尝试将设置为变化本身。 即。工作表(“控制表”)。* Varible * .AddItem(“Remark1”)将不会运行 –

+0

@ChristopherTeoh以CountryCode为关键字的对象集合如何? –

+0

听起来不错!我没有创建集合的经验。你介意举个例子吗? –