1

Тема: Word - сохранение файла

Нужно обработать тьму read-only файлов по схеме: открыть файл > применить макрос > задать имя > сохранить > (автоматическое закрытие). Следующий файл.

В самом макросе ничего сложного и интересного нет (там обычное выделение и отступы). Вся фишка в том, что файлы "только для чтения" - следовательно, и все изменения нужно сохранять в новом файле под новым именем. В принципе, мой макрос почти так и делает:

Sub mymacro()
    ...

    Application.Quit
End Sub

Т.е. по завершении всех операций макрос пытается завершить приложение. Мне помогли частично довести до ума требуемое, но не совсем. Я нажимаю кнопку, к которой привязан макрос, но потом, вместо самого диалога сохранения, вылетает сначала запрос о сохранении:
Word - сохранение файла


Как мне обойти это и сделать так, чтобы выходило сразу окно сохранения:
Word - сохранение файла

???

2

Re: Word - сохранение файла

torry пишет:

Я нажимаю кнопку, к которой привязан макрос, но потом, вместо самого диалога сохранения, вылетает сначала запрос о сохранении:
Word - сохранение файла

Долго не мог понять проблему,  разглядывая эту бледно-розовую картинку.
Application.DisplayAlerts = False, не?

3

Re: Word - сохранение файла

Сначала это увидел и долго спросонья думал как это сообщение у него могло вылезти big_smile Word - сохранение файла

4

Re: Word - сохранение файла

С кодом:

Sub mymacro()
    Application.DisplayAlerts = False
    ...

    Application.Quit
End Sub

Всё равно вылетает это:
Word - сохранение файла






А если прописать так:

Sub mymacro()
    Application.DisplayAlerts = False
    ...

    ActiveDocument.Close savechanges:=True
    Application.Quit
End Sub

То в ответ получаю это:
Word - сохранение файла


p.s.
А что, кстати, смешного-то в моём сообщении и скриншоте?

5

Re: Word - сохранение файла

Вот вполне работоспособный макрос на сохранение и закрытие:

Sub mymacro()
Dim FD As FileDialog
    …
    …
    Set FD = Application.FileDialog(msoFileDialogSaveAs)
        FD.Show
        ActiveDocument.SaveAs FD.SelectedItems(1)
        ActiveDocument.Close 0
End Sub

Вообще-то макрос должен работать циклом, а уже по завершении его ставить

Application.Quit

6

Re: Word - сохранение файла

torry пишет:

p.s.
А что, кстати, смешного-то в моём сообщении и скриншоте?

там вначале другая картинка была...
странно, а сохраняешь говоришь под другим именем?

7

Re: Word - сохранение файла

aap77, почти. Только сохраняет по умолчанию в формате docx (т.е. 2007), а мне нужно в формате doc (т.е. 97-2003). Я выставил в настройках соответствующую опцию:
Word - сохранение файла
потом перезапустил приложение, но предложенный вами вариант всё равно упорно предлагает сохранить в docx:
Word - сохранение файла







alexan0308, имя файла на скриншотах, разумеется, затёрто. Чтобы не отвлекать драгоценное внимание знатоков ненужными деталями wink

8

Re: Word - сохранение файла

Вот код сохраняющий в 2003:

Sub mymacro()
Dim FD As FileDialog
   
    Set FD = Application.FileDialog(msoFileDialogSaveAs)
        FD.FilterIndex = 3
        FD.Show
        ActiveDocument.SaveAs FD.SelectedItems(1)
        ActiveDocument.Close 0
End Sub

9

Re: Word - сохранение файла

aap77, огромное человеческое спасибо, помогло!!!

10

Re: Word - сохранение файла

Всегда пожалуйста

11

Re: Word - сохранение файла

Последний каприз  smile

Мой макрос копирует несколько слов из одной строки. Которые я потом впоследствии и использую в качестве нового имени файла.
Теперь мой макрос со всеми вашими дополнениями делает следующее - я открываю файл, применяю макрос, открывается окно сохранения, я жму "Ctrl + V", потом жму "Сохранить".
Вопрос: а можно ли "Ctrl + V" нажимать как-то программно? Т.е. чтобы SaveDialog открывался и в строку "Имя файла" вставлял содержимое буфера обмена?

12

Re: Word - сохранение файла

Я прошу прощения за свою наглость, конечно, просто пытаюсь сэкономить каждый клик в каждом файле, а то файлов слишком уж много  roll

13

Re: Word - сохранение файла

torry пишет:

Последний каприз  smile

Вопрос: а можно ли "Ctrl + V" нажимать как-то программно? Т.е. чтобы SaveDialog открывался и в строку "Имя файла" вставлял содержимое буфера обмена?

Возможно все. По какому принципу вы выделяете слова для имени файла?

14

Re: Word - сохранение файла

В моём макросе выделение текста записано так:

Selection.MoveDown Unit:=wdLine, Count:=12
Selection.MoveDown Unit:=wdLine, Count:=9, Extend:=wdExtend

Выделяю слова на 12-й строке, но т.к. количество слов заранее неизвестно, то приходится делать так: ставлю курсор в нужную позицию на строке, зажимаю Shift, нажимаю клавишу "Вниз" (таким образом выделяется вся 12-ая строка), потом, зажав Ctrl и нажимая клавишу "Влево" убираю выделение с 13-й строки до тех пор, пока курсор не окажется на 12-й строке:

Word - сохранение файла

Как-то так.

15

Re: Word - сохранение файла

Тогда код будет такой:

Sub mymacro()
Dim FD As FileDialog
    Set FD = Application.FileDialog(msoFileDialogSaveAs)
        FD.FilterIndex = 3
        FD.InitialFileName = Selection.Text
        FD.Show
        ActiveDocument.SaveAs FD.SelectedItems(1)
        ActiveDocument.Close 0
End Sub

Где Selection.Text выделенный в документе текст как имя файла. Копировать его не надо

16

Re: Word - сохранение файла

Блин, это просто сказка какая-то, чего ж я раньше-то сюда не обратился, балбес!  sad
aap77, спасибо огромное ещё раз!!!








Последнее только желание к золотой рыбке у старика осталось, но я сомневаюсь, что это вообще в принципе выполнимо средствами MSO. Допустим, я нахожусь в каталоге, в нём без малого миллион файлов, я нахожу нужный файл, открываю и макросом беру из него инфу в буфер. Потом этот файл удаляю за ненадобностью. Теперь моё желание: в макрос ворда нельзя записать, чтобы открытый файл удалялся в корзину сразу же после его закрытия?

17

Re: Word - сохранение файла

Можно. А куда потом инфа из буфера обмена уходит?

18

Re: Word - сохранение файла

Я так понял, что мы сохраняем файл под новым именем, а файл со старым именем удаляем?

19

Re: Word - сохранение файла

Если я все правильно понял, то для работы макроса нужно в редакторе VBA в меню Tools-->Reference выделить галочкой блок Microsoft Scripting Runtime и код будет таков:

Sub mymacro()
Dim FD As FileDialog
Dim FSO As FileSystemObject, f As File
Dim fn As String
    fn = ActiveDocument.FullName
    Set FD = Application.FileDialog(msoFileDialogSaveAs)
        FD.FilterIndex = 3
        FD.InitialFileName = Selection.Text
        FD.Show
        Set FSO = New FileSystemObject
        Set f = FSO.GetFile(fn)
        ActiveDocument.SaveAs FD.SelectedItems(1)
        ActiveDocument.Close 0
        f.Delete
End Sub

20

Re: Word - сохранение файла

Нет, чуть-чуть не так, извиняюсь за кривую постановку задачи.

У меня 2 папки: в первой - старые файлы (коих миллион с тележкой), во второй - новые, с мною заданными именами.

Захожу в первую папку, нахожу и открываю файл, выделяю и копирую из него нужный мне отрывок текста в несколько абзацев (с помощью простейшего макроса), закрываю и удаляю файл. Захожу в каталог-посредник, в котором файлы только для чтения (грубо говоря шаблоны), открываю подходящий файл, вставляю в него данные из буфера, выделяю те самые несколько слов и сохраняю во второй папке с уже новым именем. В общем схема как-то так и выглядит.

Теперь что мне нужно: мне просто нужно удалять файл-источник после его закрытия.

21

Re: Word - сохранение файла

В общем, я чуть переработал под себя ваш код:

Sub mymacro()
    Dim FSO As FileSystemObject, f As File
    Dim fn As String
    fn = ActiveDocument.FullName
    Set FSO = New FileSystemObject
    Set f = FSO.GetFile(fn)
    ActiveDocument.Close 0
    f.Delete
End Sub

работает как надо, только... у меня точно последняя просьба (железно последняя!  big_smile  ) - как сделать, чтобы файл удалялся не навсегда, а в корзину? Просто ошибки бывают у всех, и я не исключение, могу по запарке не тот файл грохнуть, и заметить это только потом, спустя время, при повторной проверке.