2014-04-10 35 views
1

我想在代码中将变量连接成对象名称。我有一个名为cmdopt29collapse的对象,并且我试图用一个变量替换29,但是只是在执行cmdopt &'x'&崩溃,没有工作,我在想什么?在代码中连接对象名称中的变量

Dim spaceBetween As Integer, origTop As Integer 

If cmdOpt29Collapse.Caption = "-" Then 
    cmdOpt29Collapse.SetFocus 
    Opt29File_List_subform.Visible = False 
    spaceBetween = LblOpt28.Top - Opt29File_List_subform.Top - Opt29File_List_subform.Height 
    origTop = LblOpt28.Top 
    LblOpt28.Top = lblOpt29.Top + lblOpt29.Height + spaceBetween 
    CmdOpt28Collapse.Top = CmdOpt28Collapse.Top - (origTop - LblOpt28.Top) 
    Box28.Top = Box28.Top - (origTop - LblOpt28.Top) 
    Opt28File_List_subform.Top = LblOpt28.Top + LblOpt28.Height 
    'move 27 
    spaceBetween = lblOpt27.Top - Opt28File_List_subform.Top - Opt28File_List_subform.Height 
    origTop = lblOpt27.Top 
    lblOpt27.Top = LblOpt28.Top + LblOpt28.Height + spaceBetween 
    CmdOpt27Collapse.Top = CmdOpt27Collapse.Top - (origTop - lblOpt27.Top) 
    Box27.Top = Box27.Top - (origTop - lblOpt27.Top) 
    Opt27File_List_subform.Top = lblOpt27.Top + lblOpt27.Height 
    cmdOpt29Collapse.Caption = "+" 
Else 
    spaceBetween = LblOpt28.Top - lblOpt29.Top - lblOpt29.Height 
    origTop = LblOpt28.Top 
    LblOpt28.Top = Opt29File_List_subform.Top + Opt29File_List_subform.Height + spaceBetween 
    CmdOpt28Collapse.Top = CmdOpt28Collapse.Top + (LblOpt28.Top - origTop) 
    Box28.Top = Box28.Top + (LblOpt28.Top - origTop) 
    Opt28File_List_subform.Top = LblOpt28.Top + LblOpt28.Height 
    Opt29File_List_subform.Visible = True 
    'move 27 
    spaceBetween = lblOpt27.Top - LblOpt28.Top - LblOpt28.Height 
    origTop = lblOpt27.Top 
    lblOpt27.Top = Opt28File_List_subform.Top + Opt28File_List_subform.Height + spaceBetween 
    CmdOpt27Collapse.Top = CmdOpt27Collapse.Top + (lblOpt27.Top - origTop) 
    Box27.Top = Box27.Top + (lblOpt27.Top - origTop) 
    Opt27File_List_subform.Top = lblOpt27.Top + lblOpt27.Height 
    cmdOpt29Collapse.SetFocus 
    cmdOpt29Collapse.Caption = "-" 
End If 

TL/DR,长话短说,我想给一个变量连接成一个对象引用

+1

这听起来并不可能,但你应该发布迄今为止的代码。 – Brad

+1

请参阅[这个类似的问题](http://stackoverflow.com/questions/22874920/vba-sub-insert-text-string-into-class-object-reference/22881385#22881385)...一个建议是使用'CallByName' http://support.microsoft.com/kb/186143 –

+0

如果你的对象实际上是一个窗体上的控件,那么你也可以执行'Me.Controls(“cmdopt”&x&“collapse”)' 。但如果它是一个变量,看起来像你是SOL,除非你使它成为一个属性,并使用@DavidZemens链接 – Brad

回答

0

这是我想出了。这个用户表单很简单。

它包含: TextBox1中,其内容为: “cmdopt29collapse” TextBox2中,最初写着: “cmdopt29collapse” CommandButton1的

下面是代码:

Private Sub CommandButton1_Click() 

Dim x As String 
x = "ponies" 
TextBox2.Text = Replace$("cmdopt29collapse", "29", x) 

End Sub 


Private Sub UserForm_Activate() 

TextBox2.Text = TextBox1.Text 

End Sub 

如果你的变量是一个整数,试试这个:

Private Sub CommandButton1_Click() 

Dim x As Integer 
x = 12 
TextBox2.Text = Replace$("cmdopt29collapse", "29", x) 

End Sub 


Private Sub UserForm_Activate() 

TextBox2.Text = TextBox1.Text 

End Sub 

现在这实际上并没有连接新的na我,它正在取代它。但是,你可以拿TextBox2.Text并将其用于任何你想要的。希望这可以帮助!

如果你不希望这个窗体实际上表明您可以使用:

UserForm1.Hide 
Userform2.Show vbModal 

所以你的形式会是这个样子:

Private Sub CommandButton1_Click() 

Dim x As Integer 
x = 12 
TextBox2.Text = Replace$("cmdopt29collapse", "29", x) 

End Sub 


Private Sub UserForm_Activate() 

TextBox2.Text = TextBox1.Text 
UserForm1.Hide 
UserForm2.Show vbModal 

End Sub 
+0

啊,最后一件事。我设置了初始TextBox1 = cmdopt29collapse,已经发布到UserForm的文本框中。在UserForm_Activate下,您可以将“TextBox1.Text =”cmdopt29collapse“”:) – meer2kat