гуру VBA, нид хэлп

Evgeny38

Всем привет. Столкнулся с проблемой, помогите плиз, кто рюхает в этом сраном языке.
В общем есть такой код:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Workbooks.Open ("Тут путь к какому-нибудь файлу")
End Sub
Это событие, которое возникает при сохранении рабочей книги. Предположим, что обрабатывая его, я открываю нужный мне файлик и с ним чото делаю. Этот код нормально работает, если я сохраняю книгу следующими способами: нажатие значка "Сохранить" на панели инструментов в эксель, при закрытии книги, когда вываливается сообщение "Сохранить изменения или нет" или если я пытаюсь сохранить книгу через "Сохранить как".
Но, если в каком-то модуле у меня написано:
ActiveWorkbook.save (т.е. сохраняю программно событие BeforeSave срабатывает, но когда доходит до строки с открытием файла, не выдавая никаких ошибок, он её не выполняет и переходит к следующей строке, т.е. файл не открывается. Почему такое происходит, ведь нажатие на значок "Сохранить" по идее это та же самая команда (workbook.save)?
Как быть? :confused: :confused: :confused:

bav46

Как быть?
заебашить com+ и сделать все через него.

Alena_08_11

А почему ты решил что оно срабатывает ?
Энивей, вынеси тело события в отдельную процедуру и дергай её программно когда надо.

Evgeny38

Да, это вариант, я в общем то и начал его реализовывать, только он геморнее получается. В описанной в первом сообщении проблеме непонятно, почему так происходит, это глюк или там надо какую-нибудь хрень включить/отключить перед .save?

kill-still

Application.EnableEvents == ?

khachin

У чела похожая проблема решена через создание класса.

Dasar

но когда доходит до строки с открытием файла, не выдавая никаких ошибок, он её не выполняет и переходит к следующей строке
как вариант, открытие делается через постановку сообщения в очередь, а во время работы скрипта очередь сообщений не обрабатывается

Evgeny38

ребята на cyberforum.ru подсказали следующее решение: открывать файл следующим образом
Set objExcel = CreateObject("Excel.Application")
    objExcel.Workbooks.Open ("путь к файлу")
    objExcel.Visible = True
Проверил-вроде все работает

Alena_08_11

Имхо при таком подходе будет ещё один инстанс экселя.
(в его Workbooks - будет только вновь открытый файл, и любые формулы завязанные на другие книги - не обновятся).
хотя мб гоню ...
Оставить комментарий
Имя или ник:
Комментарий: