Заранее прошу меня простить за возможно неграмотное изложение, ибо я не профессионал в работе с excel, а лишь любитель, которому приходится много с ним работать…. Столкнулся с такой проблемой. Сменил комп с 32-битной разрядной системой на другой с 64-битной. Скопировал на него нужный мне файл excel c макросом, использующий динамическую библиотеку dll. Сначала возникла проблема совместимости 64-битной системы и кода (как я понимаю) предназначенного для 32-битной системы в участке кода, имеющего вид
[vba]
Код
Declare Function XAXL Lib "CXA32.dll" (ByVal XAControl&, ByVal XAWndHnd&, ByVal XAMaxMem&, ByVal XAMaxRow&, ByVal XAMaxCol&, ByVal XAMaxNonZro&) As Integer Declare Function XAXLREV Lib "CXA32.dll" (ByVal XAControl&) As Integer Declare Function XAXLDONE Lib "CXA32.dll" (ByVal XAControl&) As Integer
[/vba]
Погуглив данную проблему добавил ключевое слово PtrSafe после каждого слова Declare – вроде проблема совместимости кода решилась… но теперь при запуске макроса возникает ошибка “Run-time error ‘48’: File not found: CXA32.dll” – то есть макрос не видит файл…
По инструкции к данному макросу файлы (библиотеки), относящиеся к данному макросу должны располагаться в папке Windows и вроде бы не требуют дополнительной регистрации. “В интренeтах” также пишут, что 64-битной системе подобные файлы должны быть в папке SysWOW64… Я пробовал копировать нужные файлы в эти и в разные другие папки (типа System32 и др.), а также пробовал прописывать в кавычках прямой путь к файлу, но результат один – макрос не находит данный файл.
Сначала думал, может в данном случае есть проблема работы с файлами «вообще», однако если через VBA просить excel открыть другую книгу, он это делает, то есть файлы видит… Возникает ощущение, что-либо я что-то не знаю о коде и там должно быть что-то допрописано для работы в 64-битной системе, или косяк в настройках excel (пользуюсь excel 2013).
Может кто сталкивался с подобным и подскажет что это за проблема и как ее решить?
Здравствуйте, уважаемые форумчане.
Заранее прошу меня простить за возможно неграмотное изложение, ибо я не профессионал в работе с excel, а лишь любитель, которому приходится много с ним работать…. Столкнулся с такой проблемой. Сменил комп с 32-битной разрядной системой на другой с 64-битной. Скопировал на него нужный мне файл excel c макросом, использующий динамическую библиотеку dll. Сначала возникла проблема совместимости 64-битной системы и кода (как я понимаю) предназначенного для 32-битной системы в участке кода, имеющего вид
[vba]
Код
Declare Function XAXL Lib "CXA32.dll" (ByVal XAControl&, ByVal XAWndHnd&, ByVal XAMaxMem&, ByVal XAMaxRow&, ByVal XAMaxCol&, ByVal XAMaxNonZro&) As Integer Declare Function XAXLREV Lib "CXA32.dll" (ByVal XAControl&) As Integer Declare Function XAXLDONE Lib "CXA32.dll" (ByVal XAControl&) As Integer
[/vba]
Погуглив данную проблему добавил ключевое слово PtrSafe после каждого слова Declare – вроде проблема совместимости кода решилась… но теперь при запуске макроса возникает ошибка “Run-time error ‘48’: File not found: CXA32.dll” – то есть макрос не видит файл…
По инструкции к данному макросу файлы (библиотеки), относящиеся к данному макросу должны располагаться в папке Windows и вроде бы не требуют дополнительной регистрации. “В интренeтах” также пишут, что 64-битной системе подобные файлы должны быть в папке SysWOW64… Я пробовал копировать нужные файлы в эти и в разные другие папки (типа System32 и др.), а также пробовал прописывать в кавычках прямой путь к файлу, но результат один – макрос не находит данный файл.
Сначала думал, может в данном случае есть проблема работы с файлами «вообще», однако если через VBA просить excel открыть другую книгу, он это делает, то есть файлы видит… Возникает ощущение, что-либо я что-то не знаю о коде и там должно быть что-то допрописано для работы в 64-битной системе, или косяк в настройках excel (пользуюсь excel 2013).
Может кто сталкивался с подобным и подскажет что это за проблема и как ее решить?timur1987
Сообщение отредактировал timur1987 - Вторник, 26.12.2017, 20:43
bmv98rus, спасибо за ссылку, к сожалению там нет конкретной рекомендации что сделать, чтобы заставить макрос "видеть" dll-файл... либо я ее не вижу. Еще раз повторюсь, что уровень моего понимания того, как надо работать с кодом, чтобы обеспечить совместимость и заставить макрос работать пока не достаточен... Может у кого-то была близкая к моей проблема и есть понятный алгоритм ее решения... P.S. оформление поправил
bmv98rus, спасибо за ссылку, к сожалению там нет конкретной рекомендации что сделать, чтобы заставить макрос "видеть" dll-файл... либо я ее не вижу. Еще раз повторюсь, что уровень моего понимания того, как надо работать с кодом, чтобы обеспечить совместимость и заставить макрос работать пока не достаточен... Может у кого-то была близкая к моей проблема и есть понятный алгоритм ее решения... P.S. оформление поправилtimur1987
если регистрировать библиотеку (хотя изначально этого никогда не требовалось) то вылезает сообщение "Возможно, модуль C:\Windows\CXA32.dll несовместим с версией Windows, работающей на этом компьютере. Проверьте, совместим ли этот модуль с x86 (32-разрядной) или x64 (64-разрядной) версией regsvr32.exe."
если переместить dll-файл в SysWOW64 и пробовать зарегистрировать используя командную строку с повышенными привилегиями вылезает "Не удалось загрузить модуль ...SysWOW64\CXA32.dll. Проверьте, что двоичный код хранится на указанном пути или запустите отладку, чтобы диагностировать проблемы с этим двоичным файлом или зависимыми DLL-файлами. Не найден указанный модуль."
Меня не покидает ощущение, что я где-то какую-то галочку не поставил или не снял в самом excel... например в tools-references... есть ли там какая-то галочка отвечающая за внешние источники и библиотеки, которые не надо регистрировать?...
krosav4ig, пробовал...
если регистрировать библиотеку (хотя изначально этого никогда не требовалось) то вылезает сообщение "Возможно, модуль C:\Windows\CXA32.dll несовместим с версией Windows, работающей на этом компьютере. Проверьте, совместим ли этот модуль с x86 (32-разрядной) или x64 (64-разрядной) версией regsvr32.exe."
если переместить dll-файл в SysWOW64 и пробовать зарегистрировать используя командную строку с повышенными привилегиями вылезает "Не удалось загрузить модуль ...SysWOW64\CXA32.dll. Проверьте, что двоичный код хранится на указанном пути или запустите отладку, чтобы диагностировать проблемы с этим двоичным файлом или зависимыми DLL-файлами. Не найден указанный модуль."
Меня не покидает ощущение, что я где-то какую-то галочку не поставил или не снял в самом excel... например в tools-references... есть ли там какая-то галочка отвечающая за внешние источники и библиотеки, которые не надо регистрировать?...timur1987
Сообщение отредактировал timur1987 - Вторник, 26.12.2017, 23:07
небольшая поправка: пользовался excel не 2013, a 2016.... сейчас переустановил 2010. Почти такая же картина, только на отсутствие ключевого слова PtrSafe не ругается...
небольшая поправка: пользовался excel не 2013, a 2016.... сейчас переустановил 2010. Почти такая же картина, только на отсутствие ключевого слова PtrSafe не ругается...timur1987
Сообщение отредактировал timur1987 - Среда, 27.12.2017, 04:35
Спасибо всем, кто проявил интерес. Решил проблему переустановкой Windows. Все заработало. Без каких-либо изменений в коде и без перемещений dll-файлов в другие папки кроме рекомендуемой инструкцией (С:\Windows\).
Спасибо всем, кто проявил интерес. Решил проблему переустановкой Windows. Все заработало. Без каких-либо изменений в коде и без перемещений dll-файлов в другие папки кроме рекомендуемой инструкцией (С:\Windows\).timur1987
Сообщение отредактировал timur1987 - Воскресенье, 31.12.2017, 07:35