根据单元格中的UserForm值调用UserForm
我有一个表具有以下值:
现在,我想根据列G中的值调用列H中的用户窗体,但是我不能根据单元格值调用用户窗体。 错误发生在行中
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
项目:
非常感谢您的帮助!
您不要“调用”用户窗体。 你实例化它,然后你Show
它。
UserForm
是派生所有用户表单的“基类”。 请参阅VBA 中的inheritance,而不是自定义类。
所以你有一个UserForm2
类,一个UserForm3
类,一个UserForm4
类,等等。
这些类需要实例化之后才能使用。
Dim theForm As UserForm Set theForm = New UserForm2 theForm.Show Set theForm = New UserForm3 theForm.Show '...
所以你需要的是一个参数化的方法Set theForm = New ?????
部分。
而你不能。 因为无论你要做什么,一个单元格的内容将会是一个string,并且你不可能从一个名为"UserForm3"
的String
中获得一个UserForm3
的实例。
做一个工厂的function,做翻译:
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
您正尝试将名称分配给蓝图 。 这是两个错误。
你必须初始化你的蓝图。 喜欢这个:
Dim form As New UserForm
然后,最有可能您的UserForm
没有名为的属性。 它被称为Caption
。 因此,它是这样的:
Sub TestMe() Dim uf As New UserForm1 'judging from your screenshot uf.Caption = "Testing" uf.Show End Sub
免责声明:有一种更好的方式来处理用户窗体,而不是滥用蓝图,尽pipe几乎每个VBA书都显示了这个UserForm.Show
方法(事实上我读过的每一个)。
如果你有时间和面向对象的知识来执行这里的想法 – 或从我的理念的解释 。 在StackOverflow中也有关于它的文档文章,但是它被整个文档的想法所删除。