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

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

4 ответов


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

  1. 64-разрядная поддержка, главным образом для API звонки. Это используется как для работы вашего кода с вашей версией OS/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-разрядной версии Окна,и на 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


эта часть на MSDN имеет больше на изменениях в VBA 7 для Office 2010:

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


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)

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