Страница 1 из 2
проблема с открытием файла в before_save при обращении из userform
Добавлено: 25 июл 2010, 11:36
district
Уважаемые! Буду признателен за помощь. Речь об excel.
UserForm1 содержит код
Unload me
thisworkbook.save
В процедуре before_save прописан код открытия некоего файла
Проблема: файл этот не открывается. Причем никаких сообщений при его открытии системой не выдается - просто проскальзывает дальше. Без формы все нормально и он открывается без проблем. Не могу никак выяснить в чем загвоздка.
Re: проблема с открытием файла в before_save при обращении из userform
Добавлено: 25 июл 2010, 18:31
Teslenko_EA
Здравствуйте
district.
обычно люди перед выходом из дома закрывают воду, выключают свет,.. выполняют доступные действия.
Unload me - по аналогии это "выход из дома", и выйдя на улицу Вы хотите выключить свет.

Евгений.
Re: проблема с открытием файла в before_save при обращении из userform
Добавлено: 26 июл 2010, 16:06
district
Здравствуйте Евгений.
Спасибо за ответ, но пока проблему не решил. Поставил unload me в конец кода - разницы нет: файл не хочет открываться и при попытке открытия ни на что не жалуется. Собственно реальная задача чуть сложнее выглядит:
UserForm2 содержит код:
userform2.hide
userform3.show
unload me
userform3 содержит код:
userform3.hide
thisworkbook.save
unload me
Процедура beforesave содержит ссылку на внутреннюю (в этом же файле) процедуру:
procedure_a
Procedure_a содержит код:
With Workbooks.Open(Filename:=XXX, UpdateLinks:=0, ReadOnly:=True)
End With
Здесь-то у меня засада и возникает: код открывающий файл при любых других обстоятельствах почему-то в заданных сбоит: файл не открывается и при этом никаких предупреждений не выдается (проверил отсутствие всевозможных on error resume next). Такое ощущение, что он открывается где-то в параллельной вселенной. Есть еще какие подозрения почему так?
Re: проблема с открытием файла в before_save при обращении из userform
Добавлено: 27 июл 2010, 06:28
EducatedFool
А попробуйте запускать форму в немодальном режиме
(типа Userform1.Show 0)
Вдруг поможет...
Re: проблема с открытием файла в before_save при обращении из userform
Добавлено: 27 июл 2010, 18:33
district
Сделал немодальный режим для обоих userform. К сожалению вновь мимо - файл не открывается и все тут.
Re: проблема с открытием файла в before_save при обращении из userform
Добавлено: 27 июл 2010, 19:33
nilem
А если напрямую вызывать процедуру:
userform3 содержит код:
userform3.hide
thisworkbook.save
Call Module1.Procedure_a
unload me
Re: проблема с открытием файла в before_save при обращении из userform
Добавлено: 28 июл 2010, 15:44
district
Спасибо, Nilem. Уточню: вы хотели сказать что в beforesave (которая и содержит procedure_a, которая в свою очередь содержит код открытия файла) procedure_a нужно вызывать кодом "Call Module1.Procedure_a" ? И сразу второй вопрос ибо с командой call не знаком - как-то обходился до сих пор: правильный код будет "Call Module(здесь номер модуля содержащего procedure_a).Procedure_a"?
Re: проблема с открытием файла в before_save при обращении из userform
Добавлено: 28 июл 2010, 16:38
nilem
Да, Call - ключевое слово, которое передает управление вызываемой процедуре. И, да, Module1 (2,3,...) - это имя модуля, в котором находится вызываемая процедура. Слово Call можно опустить, просто Module1.Procedure_a - тоже сработает. После работы вызываемой процедуры, управление передается оператору, следующему за строкой Call Module1.Procedure_a
Только поместить это надо в проц-ру закрытия userform3, я так думаю.
Если не поможет - выкладывайте файл, возможно дело не в порядке следования процедур.
Re: проблема с открытием файла в before_save при обращении из userform
Добавлено: 30 июл 2010, 14:52
district
Nilem, поясните еще одну деталь. "Procedure_a" я вызывал следующим кодом: "application.run "procedure_a". Ибо вызываемая процедура у меня относится к скрытым в списке макросов (Private Sub procedure_a ()). Видимо по этой причине использование call не проходит: "Method or data member not found". Если так, то как в таком случае правильно использовать call?
Re: проблема с открытием файла в before_save при обращении из userform
Добавлено: 30 июл 2010, 18:43
nilem
Ну да, если процедура со статусом Private (область видимости - модуль, в котором она находится), то используем метод Run, типа
Run "procedure_a"
Но лучше уберите Private (т.е. сделайте процедуру Public - доступной для всех модулей) и тогда можно так
Call Module1.procedure_a
Если процедура с названием procedure_a только одна во всем проекте, Module1 можно не указывать.