2015-04-20 8 views
3

Когда я запускаю следующий макрос:Почему Len и VBA.Len возвращают разные результаты?

Sub try() 

Dim num As Integer 

num = 123 

MsgBox Len(num) 

MsgBox VBA.Len(num) 

End Sub 

Первые Msgbox отображает 2 и второй Msgbox отображает 3. Если я удаляю первую строку, Dim num As Integer, на обеих коробках отображается 3. Может ли кто-нибудь объяснить, почему?

+1

[Первая ссылка на 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

ответ

5

Это связано с тем, что VB хранит целые числа и как функция Len() обрабатывает аргументы, которые не являются строками.

Когда тип данных, который не является строкой, передается функции Len(), он возвращает номинальное количество байтов, используемых для хранения данных (VB использует 2 байта для хранения целого числа). См. documentation for the Len function.

Функция Len() автоматически добавит переменную варианта (которая создается путем присвоения значения переменной без объявления ее первой) в виде строки. Возврат не изменяется, потому что распределение хранилища изменяется (хотя оно и есть; для вариантов требуется 16 байт пространства для хранения, минимум). Поскольку неявно объявленная переменная является фактически вариантом варианта, VB автоматически изменит свой тип в зависимости от ситуации. В этом случае Len() ожидает строку, поэтому VB делает переменную строкой.

Вы можете использовать Msgbox Len(Cstr(num)), чтобы отличать целочисленную переменную в виде строки перед передачей ее функции Len, если вы намерены вернуть количество символов в своем целочисленном значении.

+0

По-прежнему неясно, как это касается фактического вопроса: почему «Лен» и «VBA.Len» вернуть разные результаты? –

+0

Большое спасибо за ваш ответ. Я по-прежнему остаюсь с моим оригинальным вопросом, почему именно Len и VBA.Len возвращают разные результаты? (как писал Жан-Франсуа Корбетт выше меня). – hil

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