Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何使用名称中的变量打开Userform?_Excel_Vba_Userform - Fatal编程技术网

Excel 如何使用名称中的变量打开Userform?

Excel 如何使用名称中的变量打开Userform?,excel,vba,userform,Excel,Vba,Userform,我试图根据工作表中一行的单元格值打开UserForms。共有17个UserForms,因此我不想对每个表单使用17个if语句,如下所示: If ActiveCell.Value = 1 Then UserForm1.Show End If 有没有一种方法可以使用变量来显示表单 我的想法大致如下: Dim i 做 如果ActiveCell.Value=”“,则 退出DO 如果结束 i=ActiveCell.Value UserForms(“UserForm”&i)。显示****这是不起

我试图根据工作表中一行的单元格值打开UserForms。共有17个UserForms,因此我不想对每个表单使用17个if语句,如下所示:

If ActiveCell.Value = 1 Then
     UserForm1.Show
End If
有没有一种方法可以使用变量来显示表单

我的想法大致如下:

Dim i
做
如果ActiveCell.Value=”“,则
退出DO
如果结束
i=ActiveCell.Value
UserForms(“UserForm”&i)。显示****这是不起作用的
ActiveCell.Offset(0,1)。选择
环

您可以使用经常被忽略的VBA.UserForms对象。看看哪个完整地描述了你需要做什么

我在这里解释没有意义


哈维

我从来没有遇到过@Harvey提到的方法(尽管我很喜欢),所以我会使用一些精选案例陈述:

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语句更简单。

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

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


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

最简单的方法是:

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

也许它对提问的人不起作用,但我相信它将帮助将来检查此问题的人

获得由其字符串名称定义的
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
函数形式(名称为字符串)作为对象
Set Form=CallByName(UserForms,“Add”,VbMethod,Name)
端函数
子测试()
作为字符串的Dim strFormName

strFormName=“UserForm1”'哈维,感谢您的回复!不过,我不知道该如何把它融入到我的工作中去。我将在代码中使用哪种方法、语法等将userforms替换为VBA.userforms,这可能会起作用。如果没有阅读我之前发送给你的页面,请进行实验。让我看看你尝试了什么。SO的全部目的是让你在这里解释一下
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