vbams-officeoffice-2010

What are the differences between VBA 6.0 and VBA 7.0?


I noticed that Office 2010 comes with Visual Basic for Applications 7.0. However I can't seem to find much documentation on what changes were made. Does anyone have a summary of the changes, or any resources describing the differences?


Solution

  • There's not a whole lot that has changed between VBA6 and VBA7. VBA7 was introduced to support 64-bit versions of both Office and Windows (see below on what those differences are). Here are the key changes:

    1. 64-bit support, primarily for API calls. This is both used to make your code work with your OS/Office version as well as others' (i.e. someone on Office 2003/WinXP)

      • If you are on a 64-bit version of Windows, but are on a 32-bit version of Office, you can declare API calls like below. .

        #If Win64 Then
            Declare PtrSafe Function GetTickCount64 Lib "kernel32"() As LongLong
        #Else
            Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
        #End If
      • If you are on a 64-bit version of Windows, and are on a 64-bit version of Office, you can declare API calls like: .

        #If VBA7 Then
           Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _
               ByVal lpClassName As String, _
               ByVal lpWindowName As String) As LongPtr
         #Else
           Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
               lpClassName As String, ByVal lpWindowName As String) As Long
        #End If
    2. To support this, there are:

      • Three new keywords (2 data types and 1 modifier): LongPtr, LongLong and PtrSafe

      • One new function: CLngLng() (i.e. Int64)

      • The new compilation constants as used above: VBA7 and Win64