将Variant(Integer)参数转换为Variant(Long)

时间:2014-09-22 05:02:31

标签: vba type-conversion

我有一个传递给函数的Variant参数,这个参数本质上是一个Integer:

Function Foo(vNum As Variant) As Long

vNum = 50000

当我使用:

调用此函数时
Dim A As Integer
A = 2000
Foo(A)

我收到溢出错误(6)。

当我传递小于32767(整数的上限)的数字时,这似乎与vNum被“归类”为整数变量有关,当尝试分配大于32767的数字时会导致溢出。


我的问题是,如何将此“整数”变体转换或转换为可接受Longs的变体

我尝试了点击:vNum = CLng(50000)vNum = CVar(50000)

并使用虚拟变量:

Function Foo(vNum As Variant) As Long

Dim vTest As Variant
vTest = 50000
vNum = vTest

所有这些仍然会产生溢出错误(6)。

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

如果您只是将vNum设置为Long,那么就不会遇到这个问题 然后它可以包含一个2,147,483,648的数字

Function Foo(vNum As Long) As Long
    'do stuff
End Function

答案 1 :(得分:0)

我认为你应该像这样定义你的函数:

Function Foo(ByVal vNum As Variant) As Long

如果未指定ByVal,则参数将传递给ByRef,并且您对参数所做的任何操作都是在“原始”变量上进行的,因此是整数。