繁体   English   中英

根据单元格中的用户表单值调用用户表单

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM