What are possible suffixes after variable name in VBA?

后端 未结 3 1143
我在风中等你
我在风中等你 2020-11-30 11:53

As I\'ve already figured out, there is at least six of them: !@#$%&.

Here is snip:

Dim A!, B@, C#, D$, E%, F&
Debug.Print \"A! - \" & Typ         


        
相关标签:
3条回答
  • 2020-11-30 12:13

    These are long since deprecated and only remain for backward compatibility AFAIK. Declare your variables as the type required. You can also coerce variables to type.

    0 讨论(0)
  • 2020-11-30 12:15

    These suffixes are type hints, and the link in the accepted answer is outdated.

    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
    

    So you had them all, except ^ for LongLong, introduced in VBA7 for 64-bit host applications. Exactly why Microsoft introduced a new type hint for a new value type is beyond me though.

    It's more syntax poison than syntax sugar though, and dates all the way back from ancestral, dinosaurian versions of BASIC before the As clause was a thing, for example in this Commodore 64 BASIC 2.0 fizzbuzz code:

    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
    

    As you can see, type hints aren't the only paleo-code that VBA supports: line numbers, Rem comments, and explicit Let value assigments were also a thing in 1982. Avoid them at all costs.

    In literals, prefer explicit conversions over type hints:

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

    Ask yourself not whether you can, ask yourself whether you should. -- unknown

    0 讨论(0)
  • 2020-11-30 12:20

    A full(?) list is here http://support.microsoft.com/kb/110264 under Variable and Function Name Prefixes. As Remou said - they are not recommended (the article says that use is "discouraged"). I believe you covered them all in your list. Date is technically a variant (stored as a floating point) so no shortcut for that one.

    0 讨论(0)
提交回复
热议问题