Какие существуют суффиксы после имени переменной в VBA? - PullRequest
8 голосов
/ 10 февраля 2011

Как я уже понял, их как минимум шесть: !@#$%&.

Вот фрагмент кода:

Dim A!, B@, C#, D$, E%, F&
Debug.Print "A! - " & TypeName(A)
Debug.Print "B@ - " & TypeName(B)
Debug.Print "C# - " & TypeName(C)
Debug.Print "D$ - " & TypeName(D)
Debug.Print "E% - " & TypeName(E)
Debug.Print "F& - " & TypeName(F)

Выходы

A! - Single
B@ - Currency
C# - Double
D$ - String
E% - Integer
F& - Long

Где находится документация по этому синтаксическому сахару?

Какие еще существуют возможные суффиксы?

Есть ли один для даты?

Ответы [ 3 ]

5 голосов
/ 08 декабря 2016

Эти суффиксы являются подсказками типа , а ссылка в принятом ответе устарела.

Dim someInteger% '% Equivalent to "As Integer"
Dim someLong&    '& Equivalent to "As Long"
Dim someDecimal@ '@ Equivalent to "As Currency"
Dim someSingle!  '! Equivalent to "As Single"
Dim someDouble#  '# Equivalent to "As Double"
Dim someString$  '$ Equivalent to "As String"

Dim someLongLong^  '^ Equivalent to "As LongLong" in 64-bit VBA hosts

Итак, вы их все, кроме ^ для LongLong, введеныв VBA7 для 64-битных хост-приложений.Точно, почему Microsoft ввела новую подсказку типа для нового типа значения, я не знаю.

Это больше синтаксический яд , чем синтаксис sugar , хотя и встречается полностьюВернемся к исконным, динозавровским версиям BASIC до появления предложения As, например, в этом коде fizzbuzz Commodore 64 BASIC 2.0:

1000 REM INIT VARIABLES
1010 LET FIZZ$ = "FIZZ"
1011 LET BUZZ$ = "BUZZ"
1020 LET FIZZ% = 3
1021 LET BUZZ% = 5
1030 LET MIN% = 1
1031 LET MAX% = 15
1100 PRINT FIZZ$ + ":" + STR$(FIZZ%)
1101 PRINT BUZZ$ + ":" + STR$(BUZZ%)
1102 PRINT FIZZ$ + BUZZ$ + ":" + STR$(FIZZ%*BUZZ%)
1105 PRINT

Как видите, подсказки типов - не единственныеПалеокод, который поддерживает VBA: номера строк, Rem комментарии и явные присвоения значений Let также были популярны в 1982 году. Избегайте их любой ценой.

В литералах предпочитайте явные преобразования над подсказками типов:

Debug.Print TypeName(32&) 'prints Long
Debug.Print TypeName(CLng(32)) 'prints Long

Спросите себя, не можете ли вы , спросите себя, должны ли вы . - неизвестно

4 голосов
/ 10 февраля 2011

Полный (?) Список находится здесь http://support.microsoft.com/kb/110264 под префиксами переменных и имен функций. Как сказал Рему, они не рекомендуются (в статье говорится, что использовать их не рекомендуется). Я полагаю, что вы включили их в свой список. Дата технически является вариантом (хранится в виде числа с плавающей запятой), поэтому для нее нет ярлыка.

3 голосов
/ 10 февраля 2011

Они давно устарели и остаются только для обратной совместимости AFAIK. Объявите ваши переменные как требуемый тип. Вы также можете принудительно ввести переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...