VBA:如何将表单作为参数传递

TmT*_*ron 3 excel vba userform

我有一个简单的用户窗体,上面有一个按钮。我想将此表单传递给另一个模块中的函数-但即使在同一模块内,它也无法按预期工作:

Private Sub Test(ByRef oForm As MSForms.UserForm)
    Debug.Print "caption: >" & oForm.Caption & "<"
End Sub

Private Sub CommandButton3_Click()
    Debug.Print "caption: >" & Me.Caption & "<"
    Test Me
    Debug.Print "caption: >" & Me.Caption & "<"
End Sub
Run Code Online (Sandbox Code Playgroud)

当我单击按钮时,它将打印到调试控制台:

caption: >UserForm1<
caption: ><
caption: >UserForm1<
Run Code Online (Sandbox Code Playgroud)

所以Test()子里面Caption是空白。

任何想法为什么这不起作用?

注意:如果我使用它Variant作为参数类型

Ale*_* K. 6

类型UserForm并不直接等同于特定用户表单的实例,并且提供的界面略有不同。

通过表格as Object

Private Sub Test(Form As Object)
Run Code Online (Sandbox Code Playgroud)

或者对于类型安全的方法,UserForm可以实现接口:

Private Sub Test(Form As IMyForm)
Run Code Online (Sandbox Code Playgroud)