Страница: 1 |
Страница: 1 |
Вопрос: как запретить закрытие WORD-документа
Добавлено: 09.10.07 17:53
Автор вопроса: starro_serge | ICQ: 176106253
В EXEL-таблице по каждой строке формируется WORD-документ для печати.
При смене строки меняю документ.
Как запретить пользователю закрыть этот документ.
При попытке закрытия в процедуру
Private Sub Document_Close()
.............
End Sub
я попадаю.
А что внутри написать, чтобы отменить закрытие - понятия не имею.
HLP PLS.
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #1
Добавлено: 10.10.07 00:07
Вам следует попадать не в Close Event, а в DocumentBeforeClose Event (см. справку, как это сделать) и присваивать параметру Cancel этого события значение True.
Номер ответа: 2
Автор ответа:
starro_serge
ICQ: 176106253
Вопросов: 2
Ответов: 6
Профиль | | #2
Добавлено: 10.10.07 13:36
кто бы мне еще объяснил
почему объявление
Public WithEvents appWord As word.Application
дает ошибку компиляции
user-defined type not defined
word-документ поэтому создаю через переменную object - > CreateObject("Word.Application"
и работаю с документом как хочу
но процедуру DocumentBeforeClose понятное дело не могу использовать - такая же ошибка компиляции
Номер ответа: 3
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #3
Добавлено: 10.10.07 15:06
Я осмелюсь предположить, что Вы организовали связь с декларированным классом (или сделали это неправильно).
Прочитали ли Вы внимательно раздел Справки VBA Word - Using Events with the Application Object?
Номер ответа: 4
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #4
Добавлено: 10.10.07 15:06
*** упс, следует читать:
"Вы НЕ организовали связь с декларированным классом (или сделали это неправильно). "
Номер ответа: 5
Автор ответа:
starro_serge
ICQ: 176106253
Вопросов: 2
Ответов: 6
Профиль | | #5
Добавлено: 10.10.07 16:00
конечно я не прав
и хотел бы чтоб мне кто нибудь объяснил в чем
еще раз опишу ситуацию
1. в VBAProject->Sheet1->General->Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
ловим смену строки и по строке формируем word-документ
2.определяется переменная
Public WordDoc As Object
3. при ПЕРВОМ вхождении в процедуру SelectionChange
создается объект
Set WordDoc = CreateObject("Word.Application"
и дальше - открывается документ
4. Дальше при каждом вхождении в процедуру документ заполняется по текущей строке
Необходимо - запретить пользователю закрыть документ
ПРОБЛЕМА (см. выше)
1. использую объект потому что напрямую не могу определить
Public WithEvents appWord As word.Application
- ошибка компиляции - неопределенный тип (см. выше)????!!!
2. соответственно и перехватить закрытие документа не моту. Процедура DocumentBeforeClose - вызывает ошибку компиляции
Номер ответа: 6
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #6
Добавлено: 10.10.07 16:37
Уточните... Public WithEvents appWord As word.Application у Вас находится в модуле класса Word'а или Excel'я?
По идее, как я это понимаю, необходимо, чтобы эта декларация была именно в модуле класса Word'e. Так ли это?
Номер ответа: 7
Автор ответа:
starro_serge
ICQ: 176106253
Вопросов: 2
Ответов: 6
Профиль | | #7
Добавлено: 10.10.07 16:55
вот то то и оно
попытка определить Public WithEvents appWord As word.Application в модуле Excel'я вызывает ошибку компиляции
а мне как раз и нужна эта тупая непрерывная связь Excel'я и Word'а
Номер ответа: 8
Автор ответа:
starro_serge
ICQ: 176106253
Вопросов: 2
Ответов: 6
Профиль | | #8
Добавлено: 10.10.07 17:08
потому что как только пользователь закрывает Word - Excel начинает хрюкать
а документ остается занятым и открывается только через окно предупреждения: для чтения или копией и т.д.
Номер ответа: 9
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #9
Добавлено: 10.10.07 20:53
Вот я и говорю, что эта инструкция должна быть в Word'е, а НЕ в Excel'e
Номер ответа: 10
Автор ответа:
starro_serge
ICQ: 176106253
Вопросов: 2
Ответов: 6
Профиль | | #10
Добавлено: 11.10.07 10:28
Вот и я говорю что вопрос принципиальный.
Как заставить VBA for Word и VBA for Excel работать совместно, т.е. в одном модуле.
Т.е. как подключить VBA for Word в модуле Excel-таблицы и наоборот.
А так получается что это фактически два автономных продукта и связь между ними только через "Object".
Номер ответа: 11
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #11
Добавлено: 11.10.07 12:28
Собственно говоря, это действительно два разных приложения, использующих разные объектные модели, разные области памяти, разные форматы файлов... Но одно приложение в некоторой степени "прозрачно" для другого, т.е. может обращаться к объектам другого приложения и управлять ими. Но не все доступно одному приложению в другом. Так каждое приложение может обрабатывать только свои события (и события Операционной Системы и ее интерфейса, которые ему предписали обрабатывать). События одного приложения никак не влияют на другое приложение. Поэтому и не получится обработать событие попытки закрытия окна в Word непосредственно "изнутри" Excel.
Если Вам это так важно, то можно попробовать создать силами Excel модуль класса в Word и запусить на отработку необходимые процедуры в Word... Но я лично не имею для таких изворотов времени.
Можно еще предложить не запускать приложение Word вовсе, а попытаться управлять OLE WordDocument объектом, внедренным в книгу Excel... Может быть в этом случае получиться предотвратить непреднамеренное закрытие нужных окон... Но меня лично увольте и от этого.
Номер ответа: 12
Автор ответа:
starro_serge
ICQ: 176106253
Вопросов: 2
Ответов: 6
Профиль | | #12
Добавлено: 11.10.07 18:26
собственно говоря и все
благодарю за совет
но ни в первом ни во втором - нет механизма управления событиями
всего хорошего