VBA Excel. Объявление функций в 64-разрядных версиях

    Объявление функций, созданных для 32-разрядных платформ, в 64-разрядных версиях VBA Excel с помощью оператора Declare и ключевого слова PtrSafe.

    Ключевое слово PtrSafe

    Если в 64-разрядной среде разработки VBA Excel объявить следующую функцию с помощью оператора Declare:

    то она будет выделена красным цветом, а при запуске любой процедуры в этом модуле, будет сгенерирована ошибка компиляции:

    Информационное окно, сообщающее об ошибке компиляции

    Чтобы данная функция была объявлена корректно в 64-разрядной версии VBA Excel, необходимо после оператора Declare вставить ключевое слово PtrSafe:

    Среда разработки VBA 7

    Операторы Declare с ключевым словом PtrSafe представляют собой рекомендованный синтаксис для среды разработки VBA 7. Функции, объявленные таким образом, корректно работают как на 32-битных, так и на 64-битных платформах.

    Тип переменных, объявленных как Long, рекомендуется заменить на LongPtr, который в 32-разрядных системах интерпретируется как Long, а в 64-разрядных — как LongLong:

    Обратная совместимость

    Чтобы обеспечить обратную совместимость процедур (Function, Sub) в VBA7 и более ранних версиях офисных программ, используйте следующую структуру:

    Функция из примера используется для преобразования кодировки UTF-8 в Windows-1251.

    Примечание

    Пакеты Office 2010, 2013 и 2016 по умолчанию устанавливаются в 32-разрядной версии, для установки 64-разрядной версии ее необходимо выбрать явно. Начиная с Office 2019 и Microsoft 365, по умолчанию устанавливается 64-разрядная версия.


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    Добавить комментарий

    Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора.