excel 如何使用名称中的变量打开用户表单?

vddsk6oq  于 2023-02-14  发布在  其他
关注(0)|答案(6)|浏览(145)

我试图打开基于工作表中一行单元格值的用户表单。有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
v09wglhw

v09wglhw1#

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

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

致:

ShowAnyForm ("UserForm" & i)

这是一个伟大的链接哈维,我已经书签!

7ivaypg9

7ivaypg92#

你可以使用经常被忽视的VBA.UserForms对象。参见this link,它完整地描述了你需要做什么。
我在这里解释是没有意义的。
哈维

42fyovps

42fyovps3#

我从来没有遇到过@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语句简单。

abithluo

abithluo4#

最简单的方法是这个:

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

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

e4yzc0pl

e4yzc0pl5#

获取由字符串名称定义的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
euoag5mw

euoag5mw6#

这里有一个“更快”的代码打开的形式(饶Haribabu演变):

Dim forMy
Set forMy = CallByName(UserForms, "Add", VbMethod, formName) ' formName is the form name to open
forMy.Show

相关问题