在用户表单中调用 Sub

Call a Sub Within a User Form

我有一个非常直截了当的问题,我似乎无法得到明确的答案,所以在这里问。

我有一个有效的用户表单。在那个表格中有一个功能。命令按钮的代码工作正常并且调用该函数也很好。我也可以从其他模块调用 subs 就好了。

我似乎无法做的是调用也在表单中的子。正如我所说,只要以 'me'.

开头,函数就可以正常工作

但这对潜艇不起作用。我曾尝试将 subs 设为私有,public,也尝试了 Form 和 Frm。如果我 运行 它作为 'me' 我得到一个自动化错误,注意到被调用者连接失败。如果我 运行 它作为 'Form' 我收到一条错误消息,指出该对象是必需的。

所以我的问题是...您可以调用存储在同一表单中的子项吗?我想是的,因为功能有效,但事实并非如此。

我希望它们出现在表格中的原因是,当我向用户推出它时,我不必也推出其他 10 个 sub。如果我能以相同的形式存储它们,那将会很有帮助。

谢谢

这是我正在谈论的代码的一部分。 Profile1 是我要调用的子程序,如您所见,它位于同一表单中。如前所述,它可以毫无问题地调用 GetBoiler 函数。包括对 Profile2 的调用只是为了演示我尝试过的 Form 选项。

Private Sub CommandButton1_Click()


    findStr = Me.ComboBox1.Value
    Unload Me

    If findStr = "Vendor1" Then Me.Profile1
    If findStr = "Vendor2" Then Form.Profile2
    If findStr = 'Vendor3" Then Me.GetBoiler (SigString)   


   End Sub

Function GetBoiler(ByVal sFile As String) As String
    Dim fso As Object
    Dim ts As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
    GetBoiler = ts.ReadAll
    ts.Close
End Function

Private Sub Profile1()



     Select Case Application.ActiveWindow.Class
           Case olInspector
                Set oMail = ActiveInspector.CurrentItem
           Case olExplorer
                Set oMail = ActiveExplorer.Selection.Item(1)
    End Select
              SigString = Environ("appdata") & _
                "\Microsoft\Signatures\Profile1.htm"

Me 限定符指的是您所在的 class 的当前实例(是的,表单是 class),并为您提供 public 个对象的成员

Profile1Private,因此该成员不在对象的 public 接口上,因此不会作为 Me 的成员出现在 IntelliSense 中。

只是...不要限定它:

If findStr = "Vendor1" Then Profile1
If findStr = "Vendor2" Then Profile2

GetBoiler 函数隐式 PublicMe 限定符有效:

If findStr = "Vendor3" Then Me.GetBoiler (SigString)

除此之外,您有一个 函数 ,并且您将其用作 过程 ,即您正在丢弃它的 return 值。调用这样的函数时,需要去掉括号:

If findStr = "Vendor3" Then GetBoiler SigString

括号否则会强制对参数表达式求值,并传递结果 ByVal,而不管函数的签名是什么 - 这里它说的是 ByVal 无论如何,所以括号完全是多余的.

当您丢弃函数的return值时,您确实需要括号:

MsgBox "Message", vbOkOnly
result = MsgBox("Message", vbOkCancel)

在程序中间看到 Unload Me 是相当可怕的。我建议阅读 this article 我刚才写的 - 它有点高级,但非常值得理解。