在用户表单中调用子

时间:2018-07-12 20:07:43

标签: vba userform

我有一个很简单的问题,我似乎无法得到确切的答案,所以在这里问。

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

我似乎无法执行的操作是调用一个也在表单内的sub。正如我所说,只要以“ me”开头,这些功能就可以正常工作。

但这对潜艇不起作用。我试图使潜艇成为私人的,公开的,还尝试了Form和Frm。如果我将其作为“我”运行,则会出现自动化错误,并指出被叫方连接已失败。如果我将其作为“表单”运行,则会收到一条错误消息,指出该对象是必需的。

所以我的问题是...您可以调用以相同形式存储的潜艇吗?考虑到函数可以正常工作,我想是可以的,但事实并非如此。

我希望他们出现在表单中的原因是,这样一来,当我向用户推出该产品时,我也不必同时推出其他10个子产品。如果我可以将它们全部以相同的形式存储,那将会很有帮助。

谢谢

这是我正在谈论的代码的一部分。 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"

1 个答案:

答案 0 :(得分:2)

Me限定词是指您所在类的当前实例(是,表单是一个类),并为您提供该对象的公共成员。 / p>

Profile1Private,因此该成员不在对象的公共界面上,因此不会作为Me的成员出现在IntelliSense中。

只是...不符合条件:

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

GetBoiler函数隐式为PublicMe限定符起作用:

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

除了,您有一个功能,并且将其用作过程,即您要丢弃其返回值。当调用这样的函数时,您需要删除括号:

If findStr = "Vendor3" Then GetBoiler SigString

否则,括号将强制对参数表达式进行求值,并传递结果ByVal,而不管该函数的签名是什么-在这里无论如何都说ByVal,因此括号是完全多余的。 / p>

放弃函数的返回值时,要做需要括号:

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

在过程的中间看到Unload Me很吓人。我建议阅读this article我前一段时间写的-它有点高级,但是非常值得理解。