1

Тема: Отключение запроса при закрытии Word

Я воспользовалась найденным здесь замечательным макросом, который отключает диалоговое окно Word о сохранении изменений при закрытии документа. Теперь не знаю, как жить без этого макроса.
http://wordexpert.ru/page/avtomatichesk … o-zakrytii

Проблема в том, что он не работает при определённых обстоятельствах, а именно - когда я использую PractiCount (программа подсчёта символов). При попытке посчитать символы вылезает окно Ворда "Сохранение документа", где предлагается сохранить файл, который я пытаюсь посчитать. Если нажать "Отмена", появляется окошко Microsoft Visual Basic с ошибкой Run-time error '5155': Не удаётся сохранить этот файл, так как он доступен только для чтения... Если нажать на этом окошке Debug, открывается этот самый макрос, но что в нём нужно изменить, я не знаю. Искала ответ и на наших, и на зарубежных форумах, но решение так и не нашла.

Прошу, помогите, пожалуйста! Этот макрос просто бесценен, он мне сохраняет много времени при моей постоянной работе с текстовыми файлами.

P.S. Если единственное решение - установить макрос, при котором изменения не нужно сохранять, я согласна хотя бы и на такое. Но я и его не нашла в Интернете.

2

Re: Отключение запроса при закрытии Word

knyazeva пишет:

Я воспользовалась найденным здесь замечательным макросом, который отключает диалоговое окно Word о сохранении изменений при закрытии документа. Теперь не знаю, как жить без этого макроса.
http://wordexpert.ru/page/avtomatichesk … o-zakrytii

Проблема в том, что он не работает при определённых обстоятельствах, а именно - когда я использую PractiCount (программа подсчёта символов). При попытке посчитать символы вылезает окно Ворда "Сохранение документа", где предлагается сохранить файл, который я пытаюсь посчитать. Если нажать "Отмена", появляется окошко Microsoft Visual Basic с ошибкой Run-time error '5155': Не удаётся сохранить этот файл, так как он доступен только для чтения... Если нажать на этом окошке Debug, открывается этот самый макрос, но что в нём нужно изменить, я не знаю. Искала ответ и на наших, и на зарубежных форумах, но решение так и не нашла.

Прошу, помогите, пожалуйста! Этот макрос просто бесценен, он мне сохраняет много времени при моей постоянной работе с текстовыми файлами.

P.S. Если единственное решение - установить макрос, при котором изменения не нужно сохранять, я согласна хотя бы и на такое. Но я и его не нашла в Интернете.

Я не пользовался упомянутой программой, но чем вас не устраивает вордовский подсчёт символов?

3

Re: Отключение запроса при закрытии Word

Fck_This пишет:

Я не пользовался упомянутой программой, но чем вас не устраивает вордовский подсчёт символов?

Тем, что нельзя посчитать сразу много файлов.

Написала автору данного сайта на почту, но ответ, к сожалению, так и не получила. Кто-нибудь, помогите, пожалуйста.

4

Re: Отключение запроса при закрытии Word

knyazeva пишет:
Fck_This пишет:

Я не пользовался упомянутой программой, но чем вас не устраивает вордовский подсчёт символов?

Тем, что нельзя посчитать сразу много файлов.

Написала автору данного сайта на почту, но ответ, к сожалению, так и не получила. Кто-нибудь, помогите, пожалуйста.

Их можно программно открывать по очереди и отчёт по подсчёту выводить отдельно. Ну да ладно.
Скорее всего это из-за открытия документов в ReadOnlyRecomended. Попробуйте заменить свой макрос(если вы его целиком взяли с форума и не меняли) на следующий:

Sub AutoClose()
On Error Resume Next
  If ActiveDocument.Saved = False Then ActiveDocument.Save
Debug.Print Err.Number
If Err.Number = 5155 Then
    Err.Clear
    ActiveDocument.ReadOnly = False
    ActiveDocument.Save
Else
    MsgBox "Алярм!! Ошибка не в свойстве. Номер ошибки - " & Err.Number
End If
End Sub

5

Re: Отключение запроса при закрытии Word

knyazeva пишет:

Кто-нибудь, помогите, пожалуйста.

Видимо, программа PractiCount при подсчете числа символов в документе открывает файл Word, и тут срабатывает ваш макрос, который иногда ломается. Я сам сталкивался с подобными ситуациями, когда выполнял работы по локализации.
В действительности, этот макрос нужен вам для того, чтобы при ручном редактировании документа не упустить сохранение изменений, а при обработке внешними программами, такими, как PractiCount, этот макрос только мешает. Поэтому предлагаю попытаться найти решение, при котором этот макрос не срабатывает, если открытие документа Word идет по инициативе PractiCount'а. Для этого нужно на время исполнения PractiCount'а выставлять некоторый флажок.
Один из возможных вариантов:
1. PrcatiCount запускать через командный файл, который состоит из трех строк:
- командная строка создания файла flag.txt в определенной папке (название и пути доступа можно настроить).
- командная строка вызова PractiCount
- командная строка удаления файла flag.txt.
2. Изменить ваш макрос таким образом, чтобы команду сохранения несохраненного файла макрос выполнял бы только в том случае, если НЕ УСТАНОВЛЕН признак того, что запускается PractiCount. Для этого ваш макрос должен проверять наличие файла flag.txt. Если этот файл существует, значит, признак установлен, тогда не выполнять сохранение.
Поскольку командный файл удаляет файл flag.txt, то при последующем ручном редактировании документа Word ваш макрос будет срабатывать.
Найдите знакомого программиста, и он вам все это напишет.

6

Re: Отключение запроса при закрытии Word

yshindin пишет:

. . .
Один из возможных вариантов:
1. PrcatiCount запускать через командный файл, который состоит из трех строк:
- командная строка создания файла flag.txt в определенной папке (название и пути доступа можно настроить).
- командная строка вызова PractiCount
- командная строка удаления файла flag.txt.
. . .

На всякий случай, приведу пример командного bat-файла и пример когда VBA, анализирующего наличие файла.
Файл-флажок
Предположим, мы будем использовать в качестве флажка файл C:\Temp\flag.txt. Главное -  файл флажка должен быть полный доступ для пользователя (создание/чтение/запись/удаление). Содержимое файла значения иметь не будет, пусть мы будем записывать в него текст "busy".
Командный файл
Это командный файл, через который теперь будем запускать PractiCount. Важно: перед запуском этого командного файла закройте все сессии Word. Пусть командный файл хранится там же, где и флажок, в папке C:\Temp, и его имя - spc.bat. Создать файл можно в программе notepad. Cодержимое командного файла:

echo busy> C:\Temp\flag.txt
start /wait "" "C:\Program Files\PractiCount\practicount.exe"
del C:\Temp\flag.txt

Первая строка: пишем в файл флажка текст "busy"
Вторая строка: запускаем PractiCount (путь доступа к программе настроить). Важно: параметр запуска /wait указывает, что дальнейшее выполнение командного файла после запуска PractiCount будет приостановлено до ее завершения. Также важен пустой параметр перед путем доступа к программе.
Третья строка: удаляем файл флажка.
VBA-код
В составе макроса AutoClose должен быть код анализа того, существует ли в текущий момент файл флажка. Если он не существует, значит, Word запущен не из-под PractiCount'а.

If Dir("C:\Temp\flag.txt") = "" Then ' флажка нет, можно пытаться сохранить документ
. . .
End If

Вместо многоточия можно привести ваш код

If ActiveDocument.Saved = False Then ActiveDocument.Save

либо расширенный вариант кода, который привел Fck_This
Удачи вам и с Новым годом!

7

Re: Отключение запроса при закрытии Word

yshindin пишет:

Все мои периведенные меры борьбы справедливы в предположении, что PractiCount для открытия документа при подсчете слов задействует программные средства MS Office, - тогда срабатывает AutoClose, AutoOpen и т.д.
Нужно понять, вносятся ли при открытии документа PractiCount'ом изменения в документ? Напр., такое может происходить при срабатывании макроса AutoExec, AutoOpen и т.д. Если такое происходит, то отсечь такие изменения можно попытаться следующим путем: указать такой код анализа изменений:

If Dir("C:\Temp\flag.txt") = "" Then ' флажка нет, можно пытаться сохранить документ
. . .
Else
   ActiveDocument.Saved = True 'если есть изменения, то отменить их
End If

8

Re: Отключение запроса при закрытии Word

Fck_This пишет:

Попробуйте заменить свой макрос(если вы его целиком взяли с форума и не меняли) на следующий:

Sub AutoClose()
On Error Resume Next
  If ActiveDocument.Saved = False Then ActiveDocument.Save
Debug.Print Err.Number
If Err.Number = 5155 Then
    Err.Clear
    ActiveDocument.ReadOnly = False
    ActiveDocument.Save
Else
    MsgBox "Алярм!! Ошибка не в свойстве. Номер ошибки - " & Err.Number
End If
End Sub

К сожалению, ваше решение не помогло, при закрытии документов выходит ошибка Microsoft Visual Basic for Applications - Compile error: Can't assign to read-only property. Вы не знаете, как это исправить? Буду очень благодарна! Заранее спасибо!

9

Re: Отключение запроса при закрытии Word

yshindin пишет:

Вместо многоточия можно привести ваш код

If ActiveDocument.Saved = False Then ActiveDocument.Save

либо расширенный вариант кода, который привел Fck_This
Удачи вам и с Новым годом!

Вас тоже с Новым годом! К сожалению, ваш метод не помог. Я всё сделала как вы сказали, создала 2 файла - один txt, второй bat, но загвоздка возникла с изменением макроса. При попытке посчитать символы вылезает окно Ворда "Сохранение документа", где предлагается сохранить файл, который я пытаюсь посчитать. Если нажать "Отмена", появляется окошко Microsoft Visual Basic с ошибкой Run-time error '5155': Не удаётся сохранить этот файл, так как он доступен только для чтения... Если нажать на этом окошке Debug, открывается наш злополучный макрос, где жёлтым цветом выделено, что якобы со строкой If ActiveDocument.Saved = False Then ActiveDocument.Save что-то не так. Прикладываю скриншот. Если не затруднит, взгляните, пожалуйста. Заранее большое вам спасибо!

Post's attachments

Capt.JPG 29.6 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.

10

Re: Отключение запроса при закрытии Word

knyazeva пишет:

...
Если нажать на этом окошке Debug, открывается наш злополучный макрос, где жёлтым цветом выделено, что якобы со строкой
If ActiveDocument.Saved = False Then ActiveDocument.Save
что-то не так.
...

Окно Debug демонстрирует, что не проходит попытка сохранения файла. А вы свой код макроса заменили на мой? Напр., так (минимально):

If Dir("C:\Temp\flag.txt") = "" Then ' флажка нет, можно пытаться сохранить документ
    If ActiveDocument.Saved = False Then ActiveDocument.Save
Else
   ActiveDocument.Saved = True 'не сохраняем док-т: если есть изменения, то отменить их
End If

Напоминаю, главная задача - НЕ сохранять файл, если Word запускается при активном PractiCount'е.

11

Re: Отключение запроса при закрытии Word

yshindin пишет:

А вы свой код макроса заменили на мой? Напр., так (минимально):

If Dir("C:\Temp\flag.txt") = "" Then ' флажка нет, можно пытаться сохранить документ
    If ActiveDocument.Saved = False Then ActiveDocument.Save
Else
   ActiveDocument.Saved = True 'не сохраняем док-т: если есть изменения, то отменить их
End If

Напоминаю, главная задача - НЕ сохранять файл, если Word запускается при активном PractiCount'е.

Всё получилось! Вы не представляете, как я Вам благодарна. Посылаю Вам миллион лучиков добра и желаю всего хорошего в новом году!