Страница: 1 | 2 |
Вопрос: Как ограничить количество открытых документов Word
Добавлено: 26.07.08 16:33
Автор вопроса: NightWishMaster
Как на языке VBA сделать так, чтобы в данном экземпляре Ворда не могло быть открыто более одного документа? Т.е. чтобы при открытии или создании нового документа Ворд сначала предлагал закрыть уже открытый документ (если такой существует). Мне необходим «однодокументный» режим работы Ворд, такой, например, как у WordPad.
Я так понимаю, что мне нужно отлавливать событие перед открытием документа, только вот как?
Ответы
Всего ответов: 18
Номер ответа: 1
Автор ответа:
NightWishMaster
Вопросов: 3
Ответов: 11
Профиль | | #1
Добавлено: 26.07.08 16:33
Если знаете, как это сделать не на VBA, то меня это думаю тоже устроит
Номер ответа: 2
Автор ответа:
J. Smith
ICQ: ненавижу
Вопросов: 40
Ответов: 477
Web-сайт:
Профиль | | #2
Добавлено: 26.07.08 17:01
посмотри что MsgBox Documents.Count покажет
Номер ответа: 3
Автор ответа:
NightWishMaster
Вопросов: 3
Ответов: 11
Профиль | | #3
Добавлено: 26.07.08 17:10
Documents.Count показывает количество открытых документов. Но как я его могу использовать? Если я задаю события объекта Application NewDocument или DocumentOpen, то они срабатывают уже ПОСЛЕ открытия документа (в этом случае Documents.Count будет равняться 2). Если я в этих событиях попробую закрыть предыдущий документ, он окажется не сохраненным и пользователь в запросе на сохранение нажмет "Отмена", то открытыми останется два документа, а я останусь при своих интересах Аналогично с соответствующими событиями объекта Document. Я хотел бы закрывать открытый документ ДО ТОГО, как откроется новый. Только вот как?
Номер ответа: 4
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #4
Добавлено: 26.07.08 17:33
____ Я думаю, что надо в первую очередь макрос "забить" в normal.dot, потому как он пристёгивается автоматом. Может быть настроить его расположение в параметрах Word.
____ При создании нового документа Вам ничего не мешает проверить существование уже открытого и только что созданный закрыть без сохранения и выдать сообщение о необходимости закрыть существующий.
____ То есть, событие надо обрабатывать в normal.dot.
Номер ответа: 5
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #5
Добавлено: 26.07.08 18:19
____ При создании нового документа Вам ничего не мешает проверить существование уже открытого и только что созданный закрыть без сохранения и выдать сообщение о необходимости закрыть существующий.
____ То есть, событие надо обрабатывать в normal.dot.
Начинается, я думал уже не увижу этих черточек
Номер ответа: 6
Автор ответа:
NightWishMaster
Вопросов: 3
Ответов: 11
Профиль | | #6
Добавлено: 26.07.08 18:26
ADSemenov, спасибо!
Сделал так:
On Error GoTo errorHandler
If Documents.Count > 1 Then
ActiveDocument.Close
ActiveDocument.Close SaveChanges:=wdPromptToSaveChanges
If Documents.Count = 0 Then
Word.Documents.Add
End If
End If
errorHandler:
End Sub
Private Sub Document_Open()
On Error GoTo errorHandler
If Documents.Count > 1 Then
Dim OpenedFileName As String
OpenedFileName = ActiveDocument.FullName
ActiveDocument.Close
ActiveDocument.Close SaveChanges:=wdPromptToSaveChanges
If Documents.Count = 0 Then
Word.Documents.Open FileName:=OpenedFileName
End If
End If
errorHandler:
End Sub
В принципе нормально, единственный минус - это "бликанье" открываемого-закрываемого документа. Как думаете, с этим как-нить можно бороться?
И еще одно. Если я открываю не документ, а другой шаблон (не Нормал.дот), или документ на основе другого шаблона, то мои события, понятно, не происходят и второй документ преспокойно открывается. Как бороться с этим? Запретить открывать документы на основе других шаблонов?
Номер ответа: 7
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #7
Добавлено: 26.07.08 18:29
Ужас
Номер ответа: 8
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #8
Добавлено: 26.07.08 18:33
То есть, Normal.dot не отрабатывает? Если не отрабатывает, то сделать, по моему, ничего нельзя.
В Excel есть возможность с этим бороться, пристегнув надстройку, которая будет всегда загружаться с любым документом.
Номер ответа: 9
Автор ответа:
NightWishMaster
Вопросов: 3
Ответов: 11
Профиль | | #9
Добавлено: 26.07.08 18:38
Да нет, если я просто открываю любой документ, то все норм. События Normal.dot не срабатывают, если я открываю не документ, а другой шаблон, либо же создаю документ на основе другого шаблона (клацаю дважды на шалбон из проводника).
Номер ответа: 10
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #10
Добавлено: 26.07.08 19:24
Надо чтобы все шаблоны были созданы на основе normal.dot. Тогда, по-видимому, будет пристёгиватьсЯ и normal.dot во всех случаях. Попробуйте создать шаблон на основе normal.dot и создать документ на его основе.
Номер ответа: 11
Автор ответа:
NightWishMaster
Вопросов: 3
Ответов: 11
Профиль | | #11
Добавлено: 26.07.08 19:52
Чтобы события срабатывали и при открытии шаблонов, отличных от Normal.dot, я заменил эти события на аналогичные события объекта Application - DocumentOpen и NewDocument. Теперь работает и при открытии других шаблонов
Номер ответа: 12
Автор ответа:
NightWishMaster
Вопросов: 3
Ответов: 11
Профиль | | #12
Добавлено: 26.07.08 19:54
И все же - неужели никак нельзя отловить какое-нибудь событие ДО открытия документа? Все таки открытие-закрытие документа не очень приятно бликает =\ Хотя вобщем можна сказать, что задача решена.
Номер ответа: 13
Автор ответа:
NightWishMaster
Вопросов: 3
Ответов: 11
Профиль | | #13
Добавлено: 26.07.08 20:06
А как програмно поменять основной шаблон? Например, я хочу, чтобы базовым шаблоном был не Normal.dot, а Doc.dot.
Номер ответа: 14
Автор ответа:
NightWishMaster
Вопросов: 3
Ответов: 11
Профиль | | #14
Добавлено: 26.07.08 20:21
Объясню вкратце, зачем это мне - я создаю экземпляр Word програмно и хочу, чтобы в созданном экземпляре основной шаблон (Normal.dot) был другой, нежели в экземплярах Word, запущеных пользователем. Мне нужно, чтобы мой Ворд был однодокументным, в то время как Ворд, запущеный пользователем, продолжал работать как и раньше со многими документами одновременно.
Номер ответа: 15
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #15
Добавлено: 26.07.08 20:27
Может быть надо сначала создать свой шаблон (любым способом), а потом создать программно документ на его основе?