Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Симптомы
Рассмотрим следующий сценарий.
Вы пишете код макроса Microsoft Visual Basic для приложений (VBA), который использует операторы Declare.
Код макроса VBA использует константы компиляции. Например, в коде макроса используется одна из следующих констант компиляции:
- #If VBA7
- #If Win64
Блок #Else в условном блоке. В блоке #Else используется синтаксис для инструкции Declare, предназначенной для выполнения в Microsoft Visual Basic для приложений 6.0.
Код редактируем в 64-разрядной версии программы Microsoft Office 2010.
Вы пытаетесь изменить инструкцию Declare в #Else блока.
В этом случае появляется следующее сообщение об ошибке:
Microsoft Visual Basic for Applications
Compile error:
The code in this project must be updated for use on 64-bit
systems. Please review and update Declare statements and then
mark them with the PtrSafe attribute.
Примечание.
Эта проблема возникает только при изменении макроса VBA. Эта проблема не возникает при выполнении макроса.
Решение
Чтобы устранить эту проблему, пропустите сообщение об ошибке "Компиляция" и запустите код VBA в 64-разрядной версии программы Office 2010.
Дополнительная информация
Действия по воспроизведению проблемы
Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации и не предоставляет явных или подразумеваемых гарантий относительно их корректной работы в конкретных случаях и в пользовательских приложениях. Примеры в данной статье рассчитаны на пользователя, имеющего достаточный уровень знаний соответствующего языка программирования, а также необходимых средств разработки и отладки. Специалисты служб технической поддержки Майкрософт могут пояснить назначение тех или иных конструкций кода в конкретном примере, но модификация примеров и их адаптация к задачам разработчика не поддерживается.
Дополнительные сведения о доступных вариантах поддержки и способах связи с корпорацией Майкрософт см. на следующем веб-сайте Майкрософт:
https://support.microsoft.com/contactus
Запустите 64-разрядную версию Microsoft Excel 2010, русская версия, которая работает в 64-разрядной операционной системе Windows.
Примечание.
По умолчанию открывается новая книга.
Нажмите клавиши ALT+F11, чтобы Visual Basic для приложений ide 7.0.
В меню Вставка выберите пункт Модуль.
В отобразимом окне кода скопируйте и вставьте следующий код:
#If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal ms as Long) #End If
В каждом операторе Declare вручную измените имя любого параметра, передаваемого с "ms" на "millisecs".
При изменении второй инструкции Declare Visual Basic для приложений 7.0 сообщает об ошибке, указывав на то, что необходимо использовать PtrSafe. Однако отчет неправильный, так как строка находится в разделе, который выполняется только в Visual Basic для приложений 6.0. VBA 6.0 не использует PtrSafe. Таким образом, можно спокойно игнорировать сообщение об ошибке.