我发现了很多类似的主题,但没有解决方案,只有变通方法(许多建议使用类,但我不明白如何做到这一点-我希望它尽可能简单和简短)
Private Type Bottom_Rit
Bot As Integer
Rit As Integer
End Type
Dim BxR_1 As Bottom_Rit
Sub Fpage()
BxR_1 = Lab(a, b)
End Sub
Private Sub Button1_Click()
Fpage
End Sub
Function Lab(a As Integer, b As Integer) As Bottom_Rit
Lab.Bot = a
Lab.Rit = b
End Function
试图从这个线程中重复代码链接到stackoverflow线程
我得到一个错误消息">只有在公共对象模块中定义的用户定义类型可以被强制转换到变体或从变体中转换或传递给后期绑定函数">
用户自定义类型(UDT)
如果在类中定义UDT,则有以下限制
- 不能在类中使用公共UDT, userform也是类的一种。
- 不能在类的公共函数中使用UDT作为返回类型。
- 不能将UDT用作类中公共函数的参数。
- 您可以在本地类中使用UDT(即使用关键字
Private
来定义它)
来自post的代码在用户表单中使用,因此OP必须将UDT定义为Private
,并且每个函数也需要是私有的,以防UDT用于函数的签名。
这意味着下面的代码可以工作
Private Type Bottom_Rit
Bot As Integer
Rit As Integer
End Type
Private Function Lab(a As Integer, b As Integer) As Bottom_Rit
Lab.Bot = a
Lab.Rit = b
End Function
PS我还建议使用Option Explict
。你可以在这篇文章中读到它,虽然不完全适用于VBA,但它也涵盖了它。