我试图根据表单行中单元格的值打开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
答案 0 :(得分:1)
答案 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