如何使用Name中的变量打开Userform?

时间:2015-08-12 16:34:39

标签: excel vba userform

我试图根据表单行中单元格的值打开UserForms。有17个用户表单,所以我不想为每个表单使用17个if语句,如下所示:

If ActiveCell.Value = 1 Then
     UserForm1.Show
End If

有没有办法可以使用变量来显示表单?

我正在思考以下几点:

Dim i
Do
   If ActiveCell.Value = "" Then
      Exit DO
   End If
   i = ActiveCell.Value
   UserForms("UserForm" & i).Show   ****THIS is what doesn't work
   ActiveCell.Offset(0,1).Select
Loop

5 个答案:

答案 0 :(得分:1)

您可以使用经常被忽视的VBA.UserForms对象。请参阅this link,其中详细说明了您需要做的事情。

我在这里解释没有意义。

哈维

答案 1 :(得分:1)

粘贴Harvey提供的链接中的代码,然后在代码中调整此行:

UserForms("UserForm" & i).Show  ****THIS is what doesn't work

为:

ShowAnyForm ("UserForm" & i)

这是一个很棒的链接哈维,我已经为它添加了书签!

答案 2 :(得分:0)

我从来没有遇到@Harvey提到的方法(我喜欢它),所以会使用某种Select Case语句:

Select Case .Cells(1,1).Value
    Case 1:
        FormOne.Show
    Case 2:
        FormTwo.Show
    ' And so on and do forth...
    Case Else:
        MsgBox ("Invalid entry")
End Select 

比17 If语句简单,至少。

答案 3 :(得分:0)

最简单的方法是这种方式:

Dim activeuf as Object
Set activeuf = UserForm & i
activeuf.show

也许对提出要求的人不起作用,但我相信它将对以后检查此问题的人有所帮助

答案 4 :(得分:0)

获取由其字符串名称定义的 UserForm 对象

Function Form(Name As String) As Object
  Set Form = CallByName(UserForms, "Add", VbMethod, Name)
End Function

Sub Test()
  Dim strFormName As String
  strFormName = "UserForm1"  ' <-- replace by your lookup code instead
  Form(strFormName).Show
End Sub