Решение ошибки "Макрос не найден" 15.09.2015


При очередной установке макросов для Word 2010 внезапно обнаружил, что они не запускаются, только выбрасывается ошибка "Макрос не найден. Возможно, он отключен по соображениям безопасности". Все настройки в "Центре безопасности" уже выставлены, все файлы на месте. В интернете только вопросы от пользователей, и соответствующие ответы, согласно которым надо просто отключить или удалить макросы, и ошибки не будет. От программистов никаких советов не было. Хорошо, что я случайно нашел решение на MSDN. Дело оказалось в том, что некоторые функции, использующие библиотечные вызовы Windows, и разработанные для 32-битных систем, не могут быть безопасно скомпилированы на 64-битных системах, и для того, чтобы сказать компилятору, что всё ок, типа можно компилировать, надо добавить после слова Declare ключевое слово PtrSafe, т.е. получается следующее:

 Public/Private Declare PtrSafe Sub SubName Lib "LibName" Alias "AliasName" (argument list)
 Public/Private Declare PtrSafe Function FunctionName Lib "Libname" alias "aliasname" (argument list) As Type

Не знаю, почему это вылезло, т.к. и макросы разрабатывались на 64-битке, и запускались тоже, и до этого проблем с этим не было, а тут вот случилось. Запишу себе на полях, чтобы не забыть. Хотя, наверное, по-хорошему надо как-то определять битность системы и загружать функции, разработанные для конкретной битности, ну или из других, соответствующих библиотек.



Теги: Word, VBA, макрос, заметки на полях