Я заметил, что Office 2010 поставляется с Visual Basic для приложений 7.0. Однако я не могу найти много документации о том, какие изменения были внесены. Кто-нибудь имеет сводку изменений или любые ресурсы, описывающие различия?
Там не так много, что изменилось между VBA6 и VBA7. VBA7 был представлен для поддержки 64-разрядных версий Office и Windows (см. Ниже, что это за различия). Вот ключевые изменения:
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-битную версию 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 типа данных и
1): LongPtr
, LongLong
и PtrSafe
Одна новая функция: CLngLng()
(т.
Int64)
Новые константы компиляции, используемые
выше: VBA7
и Win64
В этой статье в MSDN есть больше об изменениях в VBA 7 для Office 2010:
VBA7 совместим с 64-разрядными версиями Office.
Есть и другие изменения... У меня есть пользователи в полевом отчете, что код, который правильно функционировал в 2007 году, больше не работает и показывает ошибки.
Пример: это работает в VBA6 (Excel 2007)
PRINT STRING$(80,"=")
mynewdata = MID$(mydata, 15,4)
Он печатает строку, состоящую из символов =, как визуальный разрыв, затем смотрит mydatastrong > , перескакивает символы 15 и получает 4 из них, результат сохраняется в mynewdatastrong > . Он не работает в VBA7 (Excel 2010).
Я нашел потенциальное обходное решение...
PRINT VBA.STRING$(80,"=")
mynewdata = VBA.MID$(mydata, 15,4)
ИЛИ
PRINT VBA.STRING(80,"=")
mynewdata = VBA.MID(mydata, 15,4)
Полный список изменений по-прежнему будет полезен... и/или файловый конвертер.