VBA:如何通过表单作为参数

我有一个简单的用户表单上有一个button。 我想将这个表单传递给另一个模块中的一个函数 – 但是即使在同一个模块内,它也不能按预期工作:

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 

当我点击button时,它打印到debugging控制台:

 caption: >UserForm1< caption: >< caption: >UserForm1< 

所以在Test()子项里, Caption是空白的。

任何想法,为什么这是行不通的?

注意:如果我使用Variant作为参数types,它的工作原理

typesUserForm不直接等同于特定的用户表单的一个实例,并提供一个稍微不同的接口。

as Object传递给as Object

 Private Sub Test(Form As Object) 

或者对于types安全的方法UserForm可以实现一个接口:

 Private Sub Test(Form As IMyForm) 

您必须传递UserFormtypes的variables。 这意味着如果您的表单名称是MyForm那么签名就是

 Private Sub Test(ByRef oForm As MyForm)