2014-09-22 3 views
0

Я параметр Variant передается функции, и этот параметр является по существу Integer:Преобразование параметра Variant (Integer) для Variant (Long)

Function Foo(vNum As Variant) As Long 

vNum = 50000 

Когда я вызываю эту функцию с помощью:

Dim A As Integer 
A = 2000 
Foo(A) 

Я получаю ошибку переполнения (6).

Это, похоже, связано с тем, что vNum является «классифицированным» как целочисленный вариант, когда я передаю число меньше 32767 (верхний предел целых чисел), что затем вызывает переполнение при попытке присвоить число больше 32767 .


Мой вопрос, как я бросаю или преобразовать это «Integer» Variant в один, который будет принимать Лонгс?

Я попробовал литье: vNum = CLng(50000) и vNum = CVar(50000),

и использование фиктивных переменных:

Function Foo(vNum As Variant) As Long 

Dim vTest As Variant 
vTest = 50000 
vNum = vTest 

Все они по-прежнему генерируется сообщение об ошибке, связанной с переполнением (6).

Поблагодарили бы за любую помощь!

+0

Вы уверены, что используете 'vb.net'? _ Тип данных Variant не поддерживается в Visual Basic .NET_ – Fabio

+0

Кажется, что это vba, а не vb.net ... извините, я очень новичок в vba – ehicks

ответ

0

Я думаю, вы должны просто определить свою функцию, как это:

Function Foo(ByVal vNum As Variant) As Long 

Если вы не укажете ByVal, передается ваш параметр ByRef и любая операция, которую вы делаете с параметром, производится на «исходной» переменной, следовательно, целое число.

+0

Спасибо, я не понимал, что все они переданы по ссылке. Из этого ответа я понимаю, что то, что я пытаюсь сделать на самом деле, невозможно, если вместо A не объявлено как Long. – ehicks

+0

Как общая мера безопасности, вам лучше забыть о том, как изменить переданные переменные, если это явно не предназначено и не предназначено для работы с ByRef. –

0

Если вы только что установили vNum как Long, вы не получите эту проблему.
Тогда он может содержать номер, 2,147,483,648

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

Спасибо, но это не сработало бы в моем случае как функция фактически используется в COM, и поэтому (из того, что я понимаю) требуются параметры Variant. – ehicks

Смежные вопросы