Консультация № 179461
10.07.2010, 19:31
0.00 руб.
0 30 0
Уважаемые эксперты, подскажите в следующем:
Имеется документ шаблон, например с именем 00.dot
Когда этот шаблон я открываю или с него создаю выполняется макрос.
Как сделать, так чтобы когда пользователь открыл данный файл используя в меню "Открыть"или открыл используя в меню "Создать" и ничего не делал сам лично, имеется ввиду что делать будет за пользователя макрос, а затем закрывая файл не появлялось сообщение о сохранении файла

Открыть Закрыть - чтобы не спрашивал !!!!!!!
Создать Закрыть - чтобы не спрашивал !!!!!!!
И забегая наперёд, когда всё же документ создастся на основе этого шаблона, то есть его сохранят, тогда
Открыть Закрыть чтобы не спрашивал !!!!!!!

Обсуждение

давно
Модератор
137394
1850
10.07.2010, 20:49
общий
когда пользователь открыл данный файл используя в меню "Открыть"или открыл используя в меню "Создать" и ничего не делал сам лично, имеется ввиду что делать будет за пользователя макрос, а затем закрывая файл не появлялось сообщение о сохранении файла
- когда за пользователя все изменения наделал макрос, последней исполнимой командой в этом макросе попробуйте сделать

ThisDocument.Saved = True

При этом все несохранённые изменения пропадут.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
10.07.2010, 21:10
общий
Megaloman:
Спасибо за совет, где то я уже читал, что ThisDocument и ActiveDocument
это разные вещи
Честно сказать приведённые там аргументы так до конца и не понял
Скажите Вы сообщаете, что надо указать ThisDocument.Saved = True
То есть строго так, а не ActiveDocument.Saved = True??????

давно
Модератор
137394
1850
10.07.2010, 22:07
общий
я выдал предположительную рекомендацию, поэтому я поместил реплику в форум, а не в ответ. При одном открытом файле разницы, похоже, нет. Надо пробовать в конкретной задаче, есть ли разница или нет.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
10.07.2010, 22:26
общий
MsgBox ThisDocument.Name + vbCrLf + ActiveDocument.Name

Если открыто два документа, то приведенная строка выдаёт сначала имя документа с макросом а потом имя активного документа (с фокусом). Из хелпа
ActiveDocument Property
Returns a Document object that represents the active document (the document with the focus)

Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
10.07.2010, 22:38
общий
Если у Вас открыто несколько документов, всё делает макрос (в том числе и сохраняет необходимые изменения), то, похоже надо написать не ThisDocument и не ActiveDocument, а цикл по всем открытым документам
Код:
For Each aDoc In Documents
aDoc.Saved = True
Next
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
11.07.2010, 08:51
общий
Megaloman:
Я уже пробовал и
ThisDocument.Saved = True
И
ActiveDocument.Saved = True
Безрезультатно.
Вы могли бы на отдельно взятом файле посмотреть:

Файл 00_Material.dot успешно загружен.
Ссылка для скачивания
https://rfpro.ru/upload/2802
Пароль: 1
Неизвестный
11.07.2010, 09:32
общий
Megaloman:
Я немного переделал файл, указанный выше, его я уже удалил
Теперь речь идёт о файле:
Файл 000_Material.dot успешно загружен.
Ссылка для скачивания
https://rfpro.ru/upload/2803
Пароль: 1
Посмотрите пожалуйста
Неизвестный
11.07.2010, 10:56
общий
Megaloman:
Извините ещё раз изменил
Я немного переделал файл, указанный выше, его я уже удалил
Теперь речь идёт о файле:
Файл 000_Material.dot успешно загружен.
Ссылка для скачивания
https://rfpro.ru/upload/2804
Пароль: 1
Посмотрите пожалуйста


Неизвестный
11.07.2010, 20:29
общий
Не такая функция Вам случайно нужна?
adoc.displayAlerts = false

Неизвестный
11.07.2010, 20:58
общий
Петров Сергей:
Я не знаю, что делает эта функция, не сталкивался
А что она делает?
Мне нужно вероятно следующее
во всех моих макросах Debug.Print в начале и в конце каждого макроса, чтобы писал типа "ThisDocument такой-то, ActiveDocument такой-то, макрос такой-то начался|окончился, состояние ThisDocument.Saved такое-то, состояние ActiveDocument.Saved такое-то". И посмотреть какие макросы в какой последовательности запускаются и что делают
Это мне посоветовали, но по моему мнению хоть засмотрись, ведь всё равно эти макросы в Auto находятся, как там будет потом, не знаю, может Вы подскажите что нужно изменить
Неизвестный
11.07.2010, 21:05
общий
Ципихович Эндрю:
Цитата: 238244

а затем закрывая файл не появлялось сообщение о сохранении файла

Эта функция отключает сообщения
Неизвестный
11.07.2010, 21:13
общий
Петров Сергей:
adoc я так понимаю объект - файл?????
Неизвестный
11.07.2010, 22:03
общий
Ципихович Эндрю:
Да
Неизвестный
11.07.2010, 22:19
общий
Петров Сергей:
Теперь осталось самое главное
Отключить же сообщения нужно но не всегда
Как на машинный язык перевести
Если пользователь ничего не делал, видимомо посчитать количество возможных Undo
тогда может быть
А как их посчитать???
давно
Модератор
137394
1850
11.07.2010, 23:21
общий
2804re.dot (60.0 кб) Я не разбирался в Ваших макросах, я просто добавил свою идею, не уверен, что она вам подойдёт. Я допавил процедуру и её вызов перед завершением каждого вашего блока. Не уверен, что это Вас устроит.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
11.07.2010, 23:36
общий
Megaloman:
Так и есть попробовал не то.
Всё равно спасибо
Подожду, может ещё кто чего предложит
Неизвестный
12.07.2010, 11:46
общий
Ципихович Эндрю:
Ваш файл пока не смотрел. Но могу вот что предложить. Как и советовал Megaloman, Профессионал, нужно добавить ActiveDocument.Saved = True. Именно AcitveDocument, ThisDocument будет указывать на шаблон, т.е. созданный из шаблона документ все равно будет запрашивать сохранение.
Порядок такой: в конец всего Вашего кода, который выполняется при открытии файла добавить ActiveDocument.Saved = True.
Сейчас еще Ваш файл посмотрю.
Неизвестный
12.07.2010, 12:42
общий
Ципихович Эндрю:
Посмотрел Ваши файлы: проблема во Frame, а именно в изменении его размеров в коде. Задайте все необходимые параметры сразу, т.е. ширину, высоту, расположение элементов. Потом уберите из функции строки, которые это делают, тогда всё заработает как надо.
Неизвестный
12.07.2010, 16:18
общий
Измалков Эдуард Леонидович:
Проблема в этих строках:
If Количество_файлов_с_расширением_файла_doc > 1 Then
ActiveDocument.Frame_рамка_каркас.Controls("Label_ярлык_этикетка_метка_пользователь").Visible = False 'делаем скрытым элемент управления с именем ...
ActiveDocument.Frame_рамка_каркас.Controls("ComboBox_комбинированный_список_пользователь").Left = 387.5 'расстояние элемента управления с именем ... от левого края фрейма с именем ...
ActiveDocument.Frame_рамка_каркас.Controls("ComboBox_комбинированный_список_пользователь").Value = Имя_пользователя_с_первым_знаком_1
End If
Без них работает как надо. Но без них нельзя!!!
Мне нужно вероятно следующее
во всех моих макросах Debug.Print в начале и в конце каждого макроса, чтобы писал типа "ThisDocument такой-то, ActiveDocument такой-то, макрос такой-то начался|окончился, состояние ThisDocument.Saved такое-то, состояние ActiveDocument.Saved такое-то". И посмотреть какие макросы в какой последовательности запускаются и что делают
Это мне посоветовали, но по моему мнению хоть засмотрись, ведь всё равно эти макросы в Auto находятся, как там будет потом, не знаю, может Вы подскажите что нужно изменить
давно
Модератор
137394
1850
12.07.2010, 18:39
общий
я предлагал уже
Код:
For Each aDoc In Documents    
aDoc.Saved = True
Next
Что здесь не устраивает? Поставьте в конце каждого макроса, или оформите в виде процедуры и ваызывайте её в конце каждого макроса. При этом по окончании работы каждого макроса все документы будут в состоянии Saved. Другое дело, Вы ручками после отработки макросов будете что-то менять ... Увы... Можно убрать стандартное меню, где открываются диалоги Открыть-Создать-Звкрыть, и в форме нарисовать свою клавишку завершения работы, где, если надо, сделать сохранение всего чего надо и перед выходом из Ворда вызвать предложенный мной цикл.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
12.07.2010, 19:03
общий
Megaloman:
Я же пробовал, всё также вылазит сообщение о сохранении, но всё же я хотел у Вас уточнить, как надо указать в строке: Set aDoc=???? Может тут что не так???

Set aDoc=?????
For Each aDoc In Documents
aDoc.Saved = True
Next
давно
Модератор
137394
1850
12.07.2010, 20:29
общий
Set aDoc=????? - не надо вообще
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
12.07.2010, 20:38
общий
Megaloman:
Ну у меня так и есть то есть Ваш файл от 11.07.2010, 23:21 не справляется с тем, что мне надо
Неизвестный
13.07.2010, 14:40
общий
Ципихович Эндрю:
Не нужно в коде делать изменение размера рамки и контроллеров на ней, т.е. строки начиная от
'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
'построение элемента управления с именем ...

до окончания этого блока, ограниченного:

'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Неизвестный
13.07.2010, 23:42
общий
Измалков Эдуард Леонидович:
У меня нет уже этих строк, посмотрите моё сообщение от 12.07.2010, 16:18
Или в крайнем случае выложите поправленный Вами шаблон
Неизвестный
14.07.2010, 10:49
общий
Ципихович Эндрю:
у меня до этих строк не доходило, т.к. папки такой нет. Сейчас воссоздал Ваши условия. Я так понял, что если в документе есть элемент ActiveX, и он меняется, то значение свойства Saved уже роли не играет, запрос на сохранение всё равно будет задан. Могу только вот что посоветовать. Пусть документ окрывается без изменений, но добавьте в него еще одну кнопку - "Начало работы". И уже на нее повесьте весь Ваш код. Т.е. если пользователь открыл посмотреть, то увидит просто то, что есть в шаблоне. Если же он нажмёт на кнопку, то документ примет тот вид, который должен принять.
Неизвестный
14.07.2010, 20:35
общий
Измалков Эдуард Леонидович:
Не понял:
Ну добавил ещё одну кнопку - "Начало работы". И уже на нее повесил код. Потом открыл документ, нажал на кнопку и хакрывая, что его не будет спрашивать о внесении изменеий???
Неизвестный
14.07.2010, 20:46
общий
Ципихович Эндрю:
Нет. Теперь убирайте код из autoopen, autonew. Теперь если пользователь открыл и закрыл документ, то ничего не будет, а если нажмет на кнопку - значит он согласен работать дальше и при выходе получит запрос на сохранение.
Неизвестный
15.07.2010, 22:23
общий
Петров Сергей:
Set myDoc = ActiveDocument
myDoc.DisplayAlerts = False ' ошибка 438???? Почему
Неизвестный
17.07.2010, 20:41
общий
Петров Сергей:
Думаю, воспользуюсь советом умного человека, нажал Зф2, ну нет ведь класса:
посмотрел класс Document и нет там DisplayAlerts
Приехали Петровов Сергей плохой человек, ЦЭ молодец
Форма ответа