Private убрать не могу ибо нужно, чтобы процедура не маячила перед глазами пользователей. И что-то мне подсказывает что проблема не здесь ибо саму-то процедуру "Procedure_a" excel находит ибо начинает выполнять ее. Вот только файл прописанный к открытию в этой процедуре почему-то не открывает. Грешу на какие-то ограничения связанные с процедурой before_save, которые мне не известны.
Создал образец. См. аттач. Только в коде нужно прописать путь до файла, который открывается в результате отработки "Procedure_a". Без этого при попытке сохранения будет выдаваться ошибка понятно.
проблема с открытием файла в before_save при обращении из userform
Модератор: Naeel Maqsudov
- Вложения
-
- example_problem1.zip
- (14.45 КБ) 19 скачиваний
Запускайте процедуру отсюда:
Будет работать.
Код: Выделить всё
Private Sub UserForm_Click()
Unload Me
Application.Run "procedure_a"
End Sub
Эх, хотел лишних сложных объяснений избежать - просто узнать почему так. Почему в одном случае все открывается и работает, а в другом - представленном - возникают проблемы. Я, кстати, пришел к Вашему выводу также - ввел глобальную переменную, которая регулирует запуск procedure_a в before_save. Если обстоятельства складываются так как описано в примере, то procedure_a запускается не из before_save, а из внешней процедуры или формы. В before_save, соответственно, она игнорируется. Но это все, на мой взгляд, заплатки и рано или поздно за них придется платить ибо код усложняется и его все сложнее контролировать.
Давайте расширю ситуацию до близкой к реальной, чтобы не выглядеть твердолобым:
Речь идет о том, что к процедуре before_save могут обращаться различные процедуры выполняющие различные функции в файле. Как правило проблем нет, но при описанном в примере стечении обстоятельств возникает проблема. Перестройка before_save ведет соответственно к перестройке и всех процедур к ней обращающихся - в общем выглядит для меня крайне проблемным подходом. Учитывая и то, что так или иначе представленную проблему я научился обходить (каждый раз индивидуально по обстоятельствам). Но разобраться-то надо на будущее.
Еще подробнее:
у меня есть некий набор процедур, которые занимаются расшифровкой и зашифровкой книг и файлов. К ним обращается множество процедур выполняющих некие задачи на листах и в книге в целом. Так вот в частности before_save обращается к этим процедурам, чтобы скрыть листы файла и удалить кое-какие данные ибо листы и книга под паролями. В общем делает все для того, чтобы пользователь если вдруг додумается открывать файл без поддержки макросов не увидел ничего, кроме бесполезного пустого листа, который я оставляю на поверхности. Процедуры расшифровки и зашифровки обращаются к некоему файлу извне (он-то как раз в примере и не открывается), ибо последний и содержит в себе набор паролей (я не храню их в коде). Как правило проблем с этой всей цепочкой нет, но при некоторых стечениях обстоятельств возникает сия проблема. До сих пор я просто находил разные альтернативные варианты, которые позволяют избежать такого стечения обстоятельств, который описан в примере (см. выше). Однако хотелось бы уже понять почему конкретно при этих обстоятельствах excel ведет себя так и есть ли железобетонные решения, позволяющие решать проблему в лоб - то есть не устраивая революций с перестройкой всего сложного алгоритма взаимодействия различных процедур и не усложняя код заплатками.
Давайте расширю ситуацию до близкой к реальной, чтобы не выглядеть твердолобым:
Речь идет о том, что к процедуре before_save могут обращаться различные процедуры выполняющие различные функции в файле. Как правило проблем нет, но при описанном в примере стечении обстоятельств возникает проблема. Перестройка before_save ведет соответственно к перестройке и всех процедур к ней обращающихся - в общем выглядит для меня крайне проблемным подходом. Учитывая и то, что так или иначе представленную проблему я научился обходить (каждый раз индивидуально по обстоятельствам). Но разобраться-то надо на будущее.
Еще подробнее:
у меня есть некий набор процедур, которые занимаются расшифровкой и зашифровкой книг и файлов. К ним обращается множество процедур выполняющих некие задачи на листах и в книге в целом. Так вот в частности before_save обращается к этим процедурам, чтобы скрыть листы файла и удалить кое-какие данные ибо листы и книга под паролями. В общем делает все для того, чтобы пользователь если вдруг додумается открывать файл без поддержки макросов не увидел ничего, кроме бесполезного пустого листа, который я оставляю на поверхности. Процедуры расшифровки и зашифровки обращаются к некоему файлу извне (он-то как раз в примере и не открывается), ибо последний и содержит в себе набор паролей (я не храню их в коде). Как правило проблем с этой всей цепочкой нет, но при некоторых стечениях обстоятельств возникает сия проблема. До сих пор я просто находил разные альтернативные варианты, которые позволяют избежать такого стечения обстоятельств, который описан в примере (см. выше). Однако хотелось бы уже понять почему конкретно при этих обстоятельствах excel ведет себя так и есть ли железобетонные решения, позволяющие решать проблему в лоб - то есть не устраивая революций с перестройкой всего сложного алгоритма взаимодействия различных процедур и не усложняя код заплатками.