Excel VBA 用户表单中定义类型的问题

Problem with defined type in Excel VBA Userform

我发现了很多类似的主题,但没有解决方案(很多建议使用 类,但我不知道该怎么做 - 我希望它尽可能简单和简短)

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

正在尝试重复此线程中的代码 link to Whosebug thread

我收到一条错误消息“只有在 public 对象模块中定义的用户定义类型可以被强制传入或传出变体或传递给后期绑定函数

用户定义类型 (UDT)

如果在 class 中定义 UDT,则有以下限制

  • 您不能在 class 中使用 public UDT,用户表单是一种 class。
  • 您不能使用 UDT 作为 return 在 class 中键入 public 函数。
  • 您不能将 UDT 用作 class 中 public 函数的参数。
  • 您可以在 class 本地使用 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。你可以在这个 post 中读到它,虽然不是特别适合 VBA 但它也涵盖了它。