Каковы различия между VBA 6.0 и VBA 7.0? - PullRequest
43 голосов
/ 18 июня 2010

Я заметил, что Office 2010 поставляется с Visual Basic для приложений 7.0. Однако я не могу найти много документации о том, какие изменения были сделаны. У кого-нибудь есть сводка изменений или какие-либо ресурсы, описывающие различия?

Ответы [ 4 ]

44 голосов
/ 19 июня 2010

Между VBA6 и VBA7 не так много всего изменилось.VBA7 был представлен для поддержки 64-битных версий Office и Windows (см. Ниже, каковы эти различия).Вот ключевые изменения:

  1. 64-битная поддержка, в основном для вызовов API .Это используется для того, чтобы ваш код работал с вашей версией ОС / Office, а также с другими (т. Е. Кто-то в Office 2003 / WinXP)

    • Если вы используете 64-битную версиюWindows, но в 32-разрядной версии Office вы можете объявить вызовы API, как показано ниже..

      #If Win64 Then
          Declare PtrSafe Function GetTickCount64 Lib "kernel32"() As LongLong
      #Else
          Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
      #End If
    • Если вы работаете в 64-битной версии Windows, и в 64-битной версии Office, вы можете объявить вызовы APIкак:.

      #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. Для поддержки этого есть:

    • Три новых ключевых слова (2 типа данных и 1 модификатор): LongPtr, LongLong и PtrSafe

    • Одна новая функция : CLngLng() (т.е. Int64)

    • Новые константы компиляции, использованные выше : VBA7 и Win64

10 голосов
/ 21 июня 2010

Эта статья в MSDN содержит больше изменений в VBA 7 для Office 2010:

http://msdn.microsoft.com/en-us/library/ee691831(loband).aspx#odc_office2010_Compatibility32bit64bit_IntroducingVBA7CodeBase

7 голосов
/ 18 июня 2010

VBA7 совместим с 64-разрядными версиями Office.

0 голосов
/ 09 декабря 2012

Есть и другие изменения ... У меня есть пользователи в полевом отчете, что код, который функционировал должным образом в 2007 году, больше не работает и показывает ошибки.

Например, это работает в VBA6 ( Excel 2007 )

PRINT STRING$(80,"=")
mynewdata = MID$(mydata, 15,4)

Распечатывает строку из символов " = " как визуальный разрыв, затем просматривает mydata , перепрыгивает через 15 символов и получает 4 из них результат сохраняется в mynewdata . Сбой в VBA7 ( Excel 2010 ).

Я нашел потенциальный обходной путь ...

PRINT VBA.STRING$(80,"=")
mynewdata = VBA.MID$(mydata, 15,4)

OR

PRINT VBA.STRING(80,"=")
mynewdata = VBA.MID(mydata, 15,4)

Полный список изменений все еще будет полезен ... и / или конвертер файлов.

...