Это связано с тем, что VB хранит целые числа и как функция Len()
обрабатывает аргументы, которые не являются строками.
Когда тип данных, который не является строкой, передается функции Len()
, он возвращает номинальное количество байтов, используемых для хранения данных (VB использует 2 байта для хранения целого числа). См. documentation for the Len
function.
Функция Len()
автоматически добавит переменную варианта (которая создается путем присвоения значения переменной без объявления ее первой) в виде строки. Возврат не изменяется, потому что распределение хранилища изменяется (хотя оно и есть; для вариантов требуется 16 байт пространства для хранения, минимум). Поскольку неявно объявленная переменная является фактически вариантом варианта, VB автоматически изменит свой тип в зависимости от ситуации. В этом случае Len()
ожидает строку, поэтому VB делает переменную строкой.
Вы можете использовать Msgbox Len(Cstr(num))
, чтобы отличать целочисленную переменную в виде строки перед передачей ее функции Len
, если вы намерены вернуть количество символов в своем целочисленном значении.
[Первая ссылка на Google] (http://www.dbforums.com/showthread.php?1690582-VBA-Problem-with-Len() -Function) после поиска ["excel vba len integer"] (https://www.google.com/search?safe=off&es_sm=122&q=excel+vba+len+integer) – LittleBobbyTables