[英]Call Userform based on Userform Value in cell
我有一个具有以下值的表:
现在,我想根据G列中的值调用H列中的Userform,但是我不知道如何根据单元格值调用Userform。 错误发生在行中
form.Name = wsControls.Cells(loop2, 8).Value
这是我的代码:
Sub Check_Scenarios()
Dim wsAbsatz As Worksheet
Dim wsControls As Worksheet
Dim wsData As Worksheet
Dim loop1 As Long
Dim loop2 As Long
Dim lngKW As Long
Dim form As UserForm
Set wsAbsatz = ThisWorkbook.Worksheets("Production")
Set wsData = ThisWorkbook.Worksheets("Data")
Set wsControls = ThisWorkbook.Worksheets("Controls")
lngKW = wsControls.Cells(1, 2).Value + 2
If lngKW = 3 Then
Exit Sub
End If
For loop1 = wsControls.Cells(10, 2).Value To wsControls.Cells(19, 2).Value Step 10
If wsData.Cells(loop1 + 3, lngKW).Value <> "" Then
MsgBox (wsData.Cells(loop1 + 3, lngKW).Value)
For loop2 = 2 To 16
If wsData.Cells(loop1 + 3, lngKW).Value = wsControls.Cells(loop2, 7).Value Then
form.Name = wsControls.Cells(loop2, 8).Value 'error occurs here
form.Show
End If
Next loop2
End If
Next loop1
End Sub
项目:
非常感谢您的帮助!
您正在尝试为蓝图分配名称 。 这是两个错误。
您必须将蓝图初始化为某种东西。 像这样:
Dim form As New UserForm
然后,很可能您的UserForm
没有名为Name
的属性。 它称为Caption
。 因此,它是这样的:
Sub TestMe()
Dim uf As New UserForm1 'judging from your screenshot
uf.Caption = "Testing"
uf.Show
End Sub
免责声明:有一种更好的使用UserForms的方法,而不是滥用蓝图,尽管几乎每本VBA书籍都显示了此UserForm.Show
方法(实际上到目前为止,我已经阅读过每一个方法)。
如果您有时间,并且OOP知识可以从这里 (或从我对这些想法的解释中)实施这些想法 。 在StackOverflow中也有一篇关于它的文档文章,但是由于整个文档的想法而被删除。
您不会“调用”用户表单。 您实例化它,然后Show
它。
UserForm
是派生所有用户表单的“基类”。 瞧 ,VBA继承,唯一不使用自定义类。
因此,您有一个UserForm2
类,一个UserForm3
类,一个UserForm4
类,等等。
必须先实例化这些类,然后才能使用它们。
Dim theForm As UserForm
Set theForm = New UserForm2
theForm.Show
Set theForm = New UserForm3
theForm.Show
'...
因此,您需要的是一种参数化此方法的方法Set theForm = New ?????
部分。
而且你不能。 因为无论您要做什么,单元格的内容都将是字符串,并且您无法从表示"UserForm3"
的String
中获取UserForm3
的实例。
使工厂函数执行翻译:
Public Function CreateForm(ByVal formName As String) As UserForm
Select Case formName
Case "UserForm1"
Set CreateForm = New UserForm1
Case "UserForm2"
Set CreateForm = New UserForm2
Case "UserForm3"
Set CreateForm = New UserForm3
'...
End Select
End Function
然后调用该函数以获取表单对象:
Set form = CreateForm(wsControls.Cells(loop2, 8).Value)
If Not form Is Nothing Then form.Show
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.