Каковы различия между VBA 6.0 и VBA 7.0?

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

4 ответа

Решение

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

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

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

      # Если Win64 тогда
          Объявить функцию PtrSafe GetTickCount64 Lib "kernel32"() как LongLong
      #ELSE
          Объявить функцию PtrSafe GetTickCount Lib "kernel32" () как долго
      # Конец, если
    • Если вы используете 64-разрядную версию Windows и 64-разрядную версию Office, вы можете объявить вызовы API следующим образом:.

      # Если VBA7 Тогда
         Объявить функцию PtrSafe FindWindow Lib "user32" Псевдоним "FindWindowA" ( _
             ByVal lpClassName As String, _
             ByVal lpWindowName As String) As LongPtr
       #ELSE
         Объявить функцию FindWindow Lib "user32" Псевдоним "FindWindowA" (ByVal _
             lpClassName As String, ByVal lpWindowName As String) Как долго
      # Конец, если
  2. Чтобы поддержать это, есть:

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

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

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

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

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

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

Есть и другие изменения... У меня есть пользователи в полевом отчете, что код, который функционировал должным образом в 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)

ИЛИ ЖЕ

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

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

Другие вопросы по тегам