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 但它也涵盖了它。
我发现了很多类似的主题,但没有解决方案(很多建议使用 类,但我不知道该怎么做 - 我希望它尽可能简单和简短)
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 但它也涵盖了它。