Каковы различия между VBA 6.0 и VBA 7.0?
Я заметил, что Office 2010 поставляется с Visual Basic для приложений 7.0. Однако я не могу найти много документации о том, какие изменения были сделаны. У кого-нибудь есть сводка изменений или какие-либо ресурсы, описывающие различия?
4 ответа
Там не так много, что изменилось между VBA6 и VBA7. VBA7 был представлен для поддержки 64-битных версий как Office, так и Windows (см. Ниже, каковы эти различия). Вот ключевые изменения:
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 типа данных и 1 модификатор):
LongPtr
,LongLong
а такжеPtrSafe
Одна новая функция:
CLngLng()
(т.е. Int64)Новые константы компиляции, использованные выше:
VBA7
а такжеWin64
Этот фрагмент MSDN содержит больше изменений в VBA 7 для Office 2010:
http://msdn.microsoft.com/en-us/library/ee691831(loband).aspx
Есть и другие изменения... У меня есть пользователи в полевом отчете, что код, который функционировал должным образом в 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)
Полный список изменений все равно будет полезен... и / или конвертер файлов.