Несоответствие типа аргумента ByRef
Аргумент , передаваемый ByRef (по ссылке), значение по умолчанию, должен иметь точный тип данных, ожидаемый в процедуре. Эта ошибка имеет следующие причину и решение:
Был передан аргумент с типом, не приведенный к ожидавшемуся типу.
Например, эта ошибка происходит при попытке передать переменную типа Integer, когда ожидался тип Long. Если требуется, чтобы произошло приведение, даже когда это связано с потерей информации, можно передать непосредственно сам аргумент, заключив его в скобки.
Например, чтобы передать аргумент типа Variant
MyVar
процедуре, ожидающей аргумент типа Integer, соответствующий вызов можно записать следующим образом:Dim MyVar MyVar = 3.1415 Call SomeSub((MyVar)) Sub SomeSub (MyNum As Integer) MyNum = MyNum + MyNum End Sub
Размещение непосредственно самого аргумента в скобках принудительным образом оценивает его как выражение. Во время этого оценивания дробная часть числа округляется (не посредством усечения), чтобы обеспечить соответствие ожидаемому типу аргумента. Результат оценивания помещается во временное расположение, а ссылка на это временное размещение получается процедурой. Таким образом исходный аргумент
MyVar
сохраняет свое значение.Примечание.
Если не требуется задавать тип для переменной, данная переменная получает тип по умолчанию, Variant. Это очевидно не во всех случаях. Например, в приведенном ниже коде объявляются две переменные: первая,
MyVar
, имеет тип Variant; вторая,AnotherVar
, имеет тип Integer.Dim MyVar, AnotherVar As Integer
Для получения дополнительной информации выберите необходимый элемент и нажмите клавишу F1 (для Windows) или HELP (для Macintosh).
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.