Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос не видит файл с расширением dll - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос не видит файл с расширением dll (Макросы/Sub)
Макрос не видит файл с расширением dll
timur1987 Дата: Вторник, 26.12.2017, 19:58 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте, уважаемые форумчане.

Заранее прошу меня простить за возможно неграмотное изложение, ибо я не профессионал в работе с 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 - Вторник, 26.12.2017, 20:43
 
Ответить
СообщениеЗдравствуйте, уважаемые форумчане.

Заранее прошу меня простить за возможно неграмотное изложение, ибо я не профессионал в работе с 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
Дата добавления - 26.12.2017 в 19:58
bmv98rus Дата: Вторник, 26.12.2017, 20:37 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4098
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
Declare PtrSafe Function тут https://msdn.microsoft.com/ru-ru/library/ee691831(v=office.14).aspx смотрите
B оформите пож. куски вашего кода: правка, выделить код нажать на # мышкой


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Вторник, 26.12.2017, 20:43
 
Ответить
СообщениеDeclare PtrSafe Function тут https://msdn.microsoft.com/ru-ru/library/ee691831(v=office.14).aspx смотрите
B оформите пож. куски вашего кода: правка, выделить код нажать на # мышкой

Автор - bmv98rus
Дата добавления - 26.12.2017 в 20:37
timur1987 Дата: Вторник, 26.12.2017, 21:42 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
bmv98rus, спасибо за ссылку, к сожалению там нет конкретной рекомендации что сделать, чтобы заставить макрос "видеть" dll-файл... либо я ее не вижу. Еще раз повторюсь, что уровень моего понимания того, как надо работать с кодом, чтобы обеспечить совместимость и заставить макрос работать пока не достаточен... Может у кого-то была близкая к моей проблема и есть понятный алгоритм ее решения...
P.S. оформление поправил
 
Ответить
Сообщениеbmv98rus, спасибо за ссылку, к сожалению там нет конкретной рекомендации что сделать, чтобы заставить макрос "видеть" dll-файл... либо я ее не вижу. Еще раз повторюсь, что уровень моего понимания того, как надо работать с кодом, чтобы обеспечить совместимость и заставить макрос работать пока не достаточен... Может у кого-то была близкая к моей проблема и есть понятный алгоритм ее решения...
P.S. оформление поправил

Автор - timur1987
Дата добавления - 26.12.2017 в 21:42
krosav4ig Дата: Вторник, 26.12.2017, 21:56 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2346
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
может стоит погуглить Regsvr32 ?


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеможет стоит погуглить Regsvr32 ?

Автор - krosav4ig
Дата добавления - 26.12.2017 в 21:56
timur1987 Дата: Вторник, 26.12.2017, 23:01 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
krosav4ig, пробовал...

если регистрировать библиотеку (хотя изначально этого никогда не требовалось) то вылезает сообщение "Возможно, модуль C:\Windows\CXA32.dll несовместим с версией Windows, работающей на этом компьютере. Проверьте, совместим ли этот модуль с x86 (32-разрядной) или x64 (64-разрядной) версией regsvr32.exe."

если переместить dll-файл в SysWOW64 и пробовать зарегистрировать используя командную строку с повышенными привилегиями вылезает "Не удалось загрузить модуль ...SysWOW64\CXA32.dll. Проверьте, что двоичный код хранится на указанном пути или запустите отладку, чтобы диагностировать проблемы с этим двоичным файлом или зависимыми DLL-файлами. Не найден указанный модуль."

Меня не покидает ощущение, что я где-то какую-то галочку не поставил или не снял в самом excel... например в tools-references... есть ли там какая-то галочка отвечающая за внешние источники и библиотеки, которые не надо регистрировать?...


Сообщение отредактировал timur1987 - Вторник, 26.12.2017, 23:07
 
Ответить
Сообщениеkrosav4ig, пробовал...

если регистрировать библиотеку (хотя изначально этого никогда не требовалось) то вылезает сообщение "Возможно, модуль C:\Windows\CXA32.dll несовместим с версией Windows, работающей на этом компьютере. Проверьте, совместим ли этот модуль с x86 (32-разрядной) или x64 (64-разрядной) версией regsvr32.exe."

если переместить dll-файл в SysWOW64 и пробовать зарегистрировать используя командную строку с повышенными привилегиями вылезает "Не удалось загрузить модуль ...SysWOW64\CXA32.dll. Проверьте, что двоичный код хранится на указанном пути или запустите отладку, чтобы диагностировать проблемы с этим двоичным файлом или зависимыми DLL-файлами. Не найден указанный модуль."

Меня не покидает ощущение, что я где-то какую-то галочку не поставил или не снял в самом excel... например в tools-references... есть ли там какая-то галочка отвечающая за внешние источники и библиотеки, которые не надо регистрировать?...

Автор - timur1987
Дата добавления - 26.12.2017 в 23:01
timur1987 Дата: Среда, 27.12.2017, 00:49 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
небольшая поправка: пользовался excel не 2013, a 2016.... сейчас переустановил 2010. Почти такая же картина, только на отсутствие ключевого слова PtrSafe не ругается...


Сообщение отредактировал timur1987 - Среда, 27.12.2017, 04:35
 
Ответить
Сообщениенебольшая поправка: пользовался excel не 2013, a 2016.... сейчас переустановил 2010. Почти такая же картина, только на отсутствие ключевого слова PtrSafe не ругается...

Автор - timur1987
Дата добавления - 27.12.2017 в 00:49
timur1987 Дата: Воскресенье, 31.12.2017, 01:09 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Спасибо всем, кто проявил интерес. Решил проблему переустановкой Windows. Все заработало. Без каких-либо изменений в коде и без перемещений dll-файлов в другие папки кроме рекомендуемой инструкцией (С:\Windows\).


Сообщение отредактировал timur1987 - Воскресенье, 31.12.2017, 07:35
 
Ответить
СообщениеСпасибо всем, кто проявил интерес. Решил проблему переустановкой Windows. Все заработало. Без каких-либо изменений в коде и без перемещений dll-файлов в другие папки кроме рекомендуемой инструкцией (С:\Windows\).

Автор - timur1987
Дата добавления - 31.12.2017 в 01:09
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос не видит файл с расширением dll (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!