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

Создание нового документа Word или открытие существующего из кода VBA Excel. Методы Documents.Add и Documents.Open. Сохранение и закрытие документа.

Работа с Word из кода VBA Excel
Часть 2. Создание и открытие документов Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]

Новый документ Word создается из кода VBA Excel с помощью метода Documents.Add:

Sub Test1()

Dim myWord As New Word.Application

Dim myDocument As Word.Document

Set myDocument = myWord.Documents.Add

myWord.Visible = True

End Sub

Переменную myDocument можно объявить с типом Object, но тогда не будет ранней привязки к типу Word.Document и подсказок при написании кода (Auto List Members).

Открытие существующего документа

Существующий документ Word открывается из кода VBA Excel с помощью метода Documents.Open:

Sub Test2()

Dim myWord As New Word.Application

Dim myDocument As Word.Document

Set myDocument = _

myWord.Documents.Open(«C:Документ1.docx»)

myWord.Visible = True

End Sub

Замените в этой процедуре строку «C:Документ1.docx» на адрес своего файла.

Подключение к открытому документу

Присвоение переменной ссылки на существующий экземпляр Word.Application осуществляется в VBA Excel с помощью функции GetObject:

Sub Test3()

Dim myWord As Object, myDoc As Word.Document

On Error GoTo Instr

    Set myWord = GetObject(, «Word.Application»)

    Set myDoc = myWord.Documents(«Документ1.docx»)

    myDoc.Range.InsertAfter «Добавляем новый текст, подтверждающий подключение к открытому документу.»

Exit Sub

Instr:

    MsgBox «Произошла ошибка: « & Err.Description

End Sub

Если открытого приложения Word нет, выполнение функции GetObject приведет к ошибке. Также произойдет ошибка, если не будет найден указанный документ (в примере — «Документ1.docx»).

Сохранение и закрытие документа

Сохранение нового документа

Чтобы сохранить из кода VBA Excel новый документ Word, используйте метод SaveAs2 объекта Document:

myDocument.SaveAs2 («C:Документ2.docx»)

Замените «C:Документ2.docx» на путь к нужному каталогу с именем файла, под которым вы хотите сохранить новый документ.

Сохранение изменений в открытом документа

Сохраняйте изменения в существующем документе с помощью метода Document.Save или параметра SaveChanges метода Document.Close:

‘Сохранение изменений документа

myDocument.Save

‘Сохранение изменений документа

‘при закрытии

myDocument.Close ‘по умолчанию True

myDocument.Close True

myDocument.Close wdSaveChanges

‘Закрытие документа без

‘сохранения изменений

myDocument.Close False

myDocument.Close wdDoNotSaveChanges

Закрытие любого сохраненного документа

Метод Document.Close закрывает документ, но не приложение. Если работа с приложением закончена, оно закрывается с помощью метода Application.Quit.

20 / 6 / 1

Регистрация: 06.03.2010

Сообщений: 74

1

27.03.2010, 11:08. Показов 9362. Ответов 19


Студворк — интернет-сервис помощи студентам

Доброго всем!
Такая у меня трудность: Необходимо сохранять документ ворда, созданный макросом.Он создается, для него вызывается диалоговое окно сохранения, решение о сохранении под тем или иным именем принимает пользователь.Все устраивает, кроме: имя по умолчанию в диалоговом окне стандартное (документ1 или что-то там еще…). Надо предложить свое (чтобы система была в названии, а то, блин, загаживается всякой фигней, чем попало называют файлы). не могу найти такого свойства. Может,кто знает? Не хочу жестко все сохранять. Иногда того не стоит



0



3895 / 898 / 122

Регистрация: 16.04.2009

Сообщений: 1,824

27.03.2010, 11:28

2

покажите код



0



Busine2009

Заблокирован

27.03.2010, 11:29

3

Artemo,
т. е. надо, чтобы в диалоговом окне «Сохранение документа» в поле «Имя файла» по умолчанию было определённое название?



0



20 / 6 / 1

Регистрация: 06.03.2010

Сообщений: 74

27.03.2010, 11:31

 [ТС]

4

2 BUSINE2009
В точности так. Именно этого хотелось бы
а код вот этот
wd.Dialogs(wdDialogFileSaveAs).Show
где wd это объект ворд. Документ из экселя делается. Там все данные



0



Busine2009

Заблокирован

27.03.2010, 11:42

5

Artemo,
вот что второе пришло в голову (первое было — в реестре что-нибудь изменить):

Visual Basic
1
2
3
4
5
6
Sub m_1()
With Dialogs(wdDialogFileSaveAs)
    .Name = "Моё сохранение"
    .Show
End With
End Sub

Этот макрос надо поместить в меню Файл вместо «Сохранить» и «Сохранить как…» и на Стандартную панель инструментов, вместо кнопки «Сохранить».



0



20 / 6 / 1

Регистрация: 06.03.2010

Сообщений: 74

27.03.2010, 12:04

 [ТС]

6

Не знаю, как это сделать. Просто запустить-он не работает



0



Busine2009

Заблокирован

27.03.2010, 12:20

7

Artemo,
ясное дело, что он не будет работать в Exel (wdDialogFileSaveAs).
Вот для Exel.

Visual Basic
1
2
3
Sub m_1()
Application.Dialogs(xlDialogSaveAs).Show ("Моё сохранение")
End Sub

Может в твоём случае не надо вызывать Диалоговое окно «Сохранение документа», а надо как-то автоматизировать Сохранение.



1



20 / 6 / 1

Регистрация: 06.03.2010

Сообщений: 74

27.03.2010, 12:39

 [ТС]

8

Спасибо!
Теперь буду переделывать сохранение.



0



ironegg

1904 / 781 / 31

Регистрация: 11.02.2010

Сообщений: 1,567

27.03.2010, 15:58

9

Цитата
Сообщение от Artemo
Посмотреть сообщение

не могу найти такого свойства.

Visual Basic
1
Application.FileDialog(msoFileDialogSaveAs).InitialFileName = "c:хорошее имя.txt"

для любого приложения с VBA должно работать



1



20 / 6 / 1

Регистрация: 06.03.2010

Сообщений: 74

28.03.2010, 13:26

 [ТС]

10

Спасибо! Тоже здоровский объект. И документирован. Есть простор для творчества. Коллеги удивятся теперь, всяко…:-)



0



ctac1412

18 / 18 / 2

Регистрация: 12.02.2013

Сообщений: 387

19.02.2016, 12:24

11

добрый день, Буду очень благодарен если у вас есть какие нибудь мысли.
Вопрос- Можно ли в макрос вставить не константное имя файла? Например копируем шапку файла, и «сохранить как» «вставить»

Visual Basic
1
2
3
4
5
6
Sub m_1()
With Dialogs(wdDialogFileSaveAs)
    .Name = "ctrl+v предыдущей копии"
    .Show
End With
End Sub



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

19.02.2016, 14:26

12

ctac1412,

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub m_1()
Dim s
  On Error Resume Next
  With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") 'DataObject
    .GetFromClipboard
    s = .GetText
  End With
  On Error GoTo 0
  With Dialogs(wdDialogFileSaveAs)
    .Name = s
    .Show
  End With
End Sub



0



18 / 18 / 2

Регистрация: 12.02.2013

Сообщений: 387

19.02.2016, 14:51

13

я не полный ноль, но по 10 бальной шкале я 1.
Могли бы вы пожалуйста на пальцах сказать что куда вставлять?

вот концовка макроса допустм, где копи- я копирую в буфер нужное мне название из самого файла.

П.с. я работаю в ворде

Selection.Copy

Dialogs(wdDialogFileSaveAs)

Добавлено через 6 минут
Казанский, Это я вам писал выше)) Только разобрался как ответ писать



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

19.02.2016, 15:28

14

ctac1412, так Вы не вручную копируете? Если это будет часть макроса, буфер обмена вообще не надо задействовать

Visual Basic
1
2
.Name = Selection.Text 'выделенный текст
.Name = ActiveDocument.Words(1).Text 'первое слово документа

и т.п.



0



ctac1412

18 / 18 / 2

Регистрация: 12.02.2013

Сообщений: 387

20.02.2016, 16:51

15

Казанский, Большое спасибо что тратите на меня время. Хоть и тп мне не ясно, потому что я не знаю разнообразия всех методов и мои макросы наверное такие тупые и нагруженые, а спецы делали бы это все в пару строк)) Если не сложно, не подскажете, как указать в макросе путь куда сохранять и что бы не выскакивало окно выбора пути?

Добавлено через 15 минут
Казанский, Кстати, если не сложно ответться, что делают 2-8 строки? Я их удалил, и без них работало.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub m_1()
Dim s
  On Error Resume Next
  With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") 'DataObject
    .GetFromClipboard
    s = .GetText
  End With
  On Error GoTo 0
  With Dialogs(wdDialogFileSaveAs)
    .Name = s
    .Show
  End With
End Sub

Добавлено через 9 минут
И есть ли все таки способ сделать имя из буфера? Например я макросом копирую заявление 11/11/16-1 ( далее в прога не читает такое название) у меня копируется номер заявления, вставляется в свободную строку, «/» меняются на «.» и дописывается .doc (11.11.16-1.doc) и удаляется из строки( а запись оставалась в буфере). Файл закрывается с сохранением. Потом я нажимал f2 жмакал ctrl+v и все. Нельзя «сохранить как», потому что работа с доком идет из temp папки и он положит файл в другое место. А я начинал работу с скачанным файлом и мне нужно именно ему поменять имя а не создать новый.

То есть я скачиваю ворду, перетаскиваю из мозилы в месанджер и менял имя внутри месенджера

Добавлено через 20 часов 11 минут
Я понял как можно указать папку, куда устанавливать. Но как можно сделать так, что бы не спрашивали подтверждение????

Visual Basic
1
2
3
4
5
6
ChangeFileOpenDirectory "C:UsersСтасDesktopПРОБНЫЙпробные"
    With Dialogs(wdDialogFileSaveAs)
    .Name = Selection.Text
    .Show
  End With
End Sub



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

20.02.2016, 17:19

16

Цитата
Сообщение от ctac1412
Посмотреть сообщение

я не полный ноль, но по 10 бальной шкале я 1

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

Visual Basic
1
2
ActiveDocument.SaveAs "C:UsersСтасDesktopПРОБНЫЙпробные" & Selection.Text
ActiveDocument.Close 0

Мне непонятно, текст 11/11/16-1 для формирования имени Вы вручную находите, или макросом? И нет ли этой информации в Свойствах документа?
Если макросом, то можно автоматизировать весь процесс с помощью скрипта VBS, который даже можно встроить в оболочку Проводника: Вы выделяете файл, правый клик — команда, например, Перенести — и файл переносится в другую папку с новым именем



1



ctac1412

18 / 18 / 2

Регистрация: 12.02.2013

Сообщений: 387

20.02.2016, 17:56

17

Огромное спасибо. Именно через запись я и учусь. Но не все мои действия он прописывает. С тем же сохранить как. Я сам уже написал для себя 7 макросов, мне кажется они настолько ****ты, и что есть намного проще решения)) Но как есть, черновой вариант все же лучше чем ничего))

Тест я нахожу макросом и переделываю в формат 11_11_16-1. А вообще это все просто конец одного большого макроса с манипуляциями с текстами. Просто хочется что бы макрос логически заканчивался Не подскажете полезную литературу?) Где можно найти описанный вами вариант? Очень сложно уже благодарить всех на этом сайте.

Добавлено через 11 минут
Вот например моя голова ничего неможет придумать, что бы файлы сохранялись в док формате, кроме как к выделенному тексту дописать».doc». но тогда структура файла измениться. Произвел сохранение файла в доке вот что пишет бэйсик

Visual Basic
1
2
3
4
5
ActiveDocument.SaveAs FileName:="врТС-МО07.01196.doc", FileFormat:= _
        wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
        True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
        False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False

Видимо здесь он указывает что док в строчке имени файла, но ведь нам не подходит этот вариант. Что можно сделать?

Добавлено через 4 минуты
нашел решение)) можете порадоваться за юного падавана)

Visual Basic
1
2
3
ActiveDocument.SaveAs "C:UsersСтасDesktopПРОБНЫЙпробные" & Selection.Text, FileFormat:= _
wdFormatDocument
ActiveDocument.Close 0



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

21.02.2016, 00:47

18

Цитата
Сообщение от ctac1412
Посмотреть сообщение

Не подскажете полезную литературу?

Учебники, справочники, самоучители

Цитата
Сообщение от ctac1412
Посмотреть сообщение

Тест я нахожу макросом и переделываю в формат 11_11_16-1
… к выделенному тексту дописать».doc»

Есть подозрение, что Вы делаете это в документе. Но в VBA есть много функций и операторов для работы со строками!
Например, можно написать свою функцию для замены символов, которые недопустимо использовать в имени файла, на «_», за исключением «/», который менять на точку:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Function ValidFileName(s As String) As String
Dim i As Long
  ValidFileName = s
  For i = 1 To Len(s)
    If Mid$(s, i, 1) = "/" Then
      Mid$(ValidFileName, i, 1) = "."
    ElseIf InStr("/:*?""<>|", Mid$(s, i, 1)) Then
      Mid$(ValidFileName, i, 1) = "_"
    End If
  Next
End Function

Тогда записать документ в другую папку с именем, взятым из выделенного диапазона, можно так:

Visual Basic
1
2
ActiveDocument.SaveAs "C:UsersСтасDesktopПРОБНЫЙпробные" & ValidFileName(Selection.Text) & ".doc", _
  FileFormat:=ActiveDocument.SaveFormat

То есть если перед этой командой выделить текст 11/11/16-1 , то файл будет сохранен в
C:UsersСтасDesktopПРОБНЫЙпробные11.11.16-1.doc
и с тем же форматом файла (формат не зависит от расширения!)



1



ctac1412

18 / 18 / 2

Регистрация: 12.02.2013

Сообщений: 387

21.02.2016, 01:23

19

вроде разобрался, даже через пол часа понял как вставить функцию))) Котелок не варит уже… нельзя наверное так быстро пытаться понимать?)
А что, если сохранение активного окна это не конец макроса? Функция все равно сработает? ( я ее прописал ниже макроса) НО у меня на странице до 10 макросов бывает. Или я не верно их оформляю?)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub QQQ()
ActiveDocument.SaveAs "C:UsersСтасDesktopпробные" & ValidFileName(Selection.Text) & ".doc", _
  FileFormat:=ActiveDocument.SaveFormat
End Sub
 
Function ValidFileName(s As String) As String
Dim i As Long
  ValidFileName = s
  For i = 1 To Len(s)
    If Mid$(s, i, 1) = "/" Then
      Mid$(ValidFileName, i, 1) = "."
    ElseIf InStr("/:*?""<>|", Mid$(s, i, 1)) Then
      Mid$(ValidFileName, i, 1) = "_"
    End If
  Next
End Function



0



18 / 18 / 2

Регистрация: 12.02.2013

Сообщений: 387

22.02.2016, 19:55

20

Добрый день! Помогите пожалуйста!! Появилась новая потребность. Нужно сохранить файл именем, которое не будет в самом файле, но мы можем его скопировать из предыдущего открытого файла.Может как то по ходу макроса задать свойство доку и взять имя из свойства или какие нибудь еще аферы? или подпись…..



0



Всем привет, с вами автор блога scriptcoding.ru. Данная публикация рассматривает сохранение документа в Word с помощью программирования и с помощью рядовых методов системы Windows.

По сути, что тут может быть особенно – нажал на кнопку «Сохранить» или «Сохранить Как» и все, радуйся жизни. Но, так как я очень люблю оперировать, тьфу ты… программировать, то я решил рассмотреть решение данной задачи программным путем.

Из всей объектной модели Word, компонентами, которые предоставляют средства для сохранения в ворде документа, являются объект Documentи коллекция Documents. По сути, у объекта Document есть два метода: Save и SaveAs, которые соответствуют диалоговым окнам «Сохранить» и «Сохранить Как«, а коллекция предоставляет только метод Save. Я уже рассматривал данный объект и коллекцию, но не углублялся в методы Save и SaveAs, а все потому, что у метода SaveAs огромное количество параметров, описание которых тянет на отдельную статью. Вот я и решил собрать все это воедино, и описать.

Объект Document – сохранение в ворде

как сохранить в ворде документ

Save(NoPrompt, OriginalFormat) – Показывает, как в ворде сохранить все файлы, которые входят в коллекцию Documents.

NoPrompt – Если значение true, то Word автоматически сохранит все файлы. Если значение false — Word предложит пользователю сохранить каждый файл, изменившийся с момента последнего сохранения.

OriginalFormat — Определяет, как документы будут сохранены в ворде. Содержит значение константы WdOriginalFormat:

  • wdOriginalDocumentFormat — 1 — Оригинальный формат.
  • wdPromptUser — 2 – Пользователю будет предложено выбрать формат.
  • wdWordDocument — 0 – Формат Microsoft Word.

Если сохранение в ворде ранее не производилось, то диалоговое окно «Сохранить как» запросит у пользователя имя файла.

SaveAs(FileName, FileFormat, LockComments, Password, AddToRecentFiles, WritePassword, ReadOnlyRecommended, EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData, SaveAsAOCELetter, Encoding, InsertLineBreaks, AllowSubstitutions, LineEnding, AddBiDiMarks, CompatibilityMode) – Сохранение файла Word с новым именем или форматом (Диалоговое окно «Сохранить Как»).

FileName – Позволяет задать путь и имя сохраняемого файла в ворде. Если задать только имя файла, то произойдет сохранение в ворд в папке по умолчанию – «Мои Документы». Если документ с таким именем уже существует, то произойдет перезапись без уведомления пользователя.

FileFormat – Задаем формат, в котором сохраняется документ в Word. Значение константы WdSaveFormat.

Константа WdSaveFormatпозволяет задать формат PDF (wdFormatPDF – 17) или XPS(wdFormatXPS — 18). Однако, что бы сохранить в ворде файл в этих форматах, вам придется установить расширение SaveAsPDFandXPS, которое доступно на сайте Майкрософт. Смотрите статью «Как в ворде сохранить документ в PDF формате»

LockComments – Содержит логические значения, true — заблокировать документ для комментариев. По умолчанию используется false.

Password – Пароль для открытия.

AddToRecentFiles – Содержит логическое значение, true — добавить документ в список недавно использовавшихся в меню Файл. По умолчанию используется True.

WritePassword — Пароль для сохранения в ворде изменений.

ReadOnlyRecommended — Содержит логические значения, true – открывать только для чтения. По умолчанию используется False.

EmbedTrueTypeFonts — Содержит логические значения, true – сохранить TrueType шрифты вместе с документом.

SaveNativePictureFormat – Параметр используется, если графики были импортированы из другой платформы (например, Macintosh). true — сохранить в ворд только версию Microsoft Windows импортируемых графиков.

SaveFormsData –true — сохранить в ворд данные, введенные пользователем в форме в виде записи.

SaveAsAOCELetter – Параметр актуален, если документ имеет прикрепленное почтовое вложение. true – сохраняем документ Word как AOCE письмо.

Encoding – Отвечает за кодировку текста. По умолчанию используется системная кодировка. Параметр должен содержать значение константы MsoEncoding.

InsertLineBreaks – Параметр используется, если происходит сохранение документа в Word в виде текстового файла. true — вставить разрывы строк в конце каждой строки текста.

AllowSubstitutions – Актуально, если файл ворд сохраняется в виде текстового файла. Значение true позволяет Word заменить некоторые символы в тексте их упрощенными аналогами. Например, символа авторского права. По умолчанию используется значение False.

LineEnding – Определяет форматирование строк и абзацев в документах, сохраненных в виде текстовых файлов. Может быть одним из следующих значений константы WdLineEndingType:

  • wdCRLF — 0 — возврат каретки и строки.
  • wdCROnly — 1 — Возврат только каретки.

AddBiDiMarks – true — добавить управляющие символы в выходной файл.

CompatibilityMode — Режим совместимости, который Word2010 использует при открытии документа. Значение константы WdCompatibilityMode:

  • wdCurrent — 65535 — Совместимость режим эквивалентен последней версии Microsoft Word.
  • wdWord2003 — 11 — Word2010 введен в режиме, который наиболее совместим с Word2003.
  • wdWord2007 — 12 — Word2010 введен в режиме, который наиболее совместим с Office Word2007.
  • wdWord2010 — 14 — Word2013 введен в режиме, который наиболее совместим.
  • wdWord2013 — 15 — По умолчанию. Все функции Word 2013 включены.

Если данный параметр отсутствует, то принимается значение 0 – сохраняется текущий режим совместимости.

Коллекция Documents – как в ворде сохранить документ

сохранение в word документа

Save(NoPrompt, OriginalFormat) – Метод выполняет ту же функцию, что и Save объекта Document, только для коллекции Documents.

Хорошо, с теорией закончили, теперь привожу два примера программного кода на языке VBScript и JScript, котрые создают новый документ, вставляют в него форматированный текст, содержащий информацию о сервере сценариев Windows Script Host и сохраняют в ворде данный документ в текущем каталоге (каталог, откуда был произведен запуск сценария).

Программный код на языке VBSCRIPT:

' ----------------------------------------------------------------------------
' Сохранение документа в Word
' SaveAs.vbs
' ----------------------------------------------------------------------------
Option Explicit
 
dim oWord, oDoc, oSel, oFont, oShell, CurDir
 
set oWord = WScript.CreateObject("Word.Application")   
set oShell = WScript.CreateObject("WScript.Shell")
set oDoc = oWord.Documents                       
oDoc.Add()                                                            
set oSel = oWord.Selection                           
oWord.Visible = True                                           
set oFont = oSel.Font
 
CurDir = oShell.CurrentDirectory        'текущая папка
 
with oFont
    .Size = 20
    .Name = "Times New Roman"
    .Bold=true
    .Colorindex=2
end with
 
oSel.TypeText "как в ворде сохранить документ"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ' word сохранение файла
 
with oFont
    .Size = 12
    .Bold=false
    .Colorindex=0
end with
 
With oSel
     .TypeParagraph
     .TypeParagraph
End With
 
With WScript
     call TXInsert("Name: ", .Name & "")
     call TXInsert("FullName: ", .FullName & "")
     call TXInsert("ScriptName: ", .Name & "")
     call TXInsert("ScriptFullName: ", .FullName & "")
     call TXInsert("Path: ", .Path & "")
     call TXInsert("Version: ", .Version & "")
     call TXInsert("Application: ", .Application & "")
     call TXInsert("Timeout: ", .Timeout & "")
     call TXInsert("BuildVersion: ", .BuildVersion & "")
End With
 
oDoc(1).SaveAs CurDir & "WscInfo_vbs.doc", 0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ' сохранение в ворде
 
Sub TXInsert(a, b)
     With oSel
                 oFont.Bold=true
                 .TypeText a
                 .EndOf
                 oFont.Bold=false
                 .TypeText b
                 .TypeParagraph
     End With
End Sub

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

Программный код на языке JSCRIPT:

// ----------------------------------------------------------------------------
// Сохранение документа в Word
// SaveAs.js
// ----------------------------------------------------------------------------
var oWord1, oDoc1, oSel1, oFont1, oShell1, CurDir1;
 
oWord1 = WScript.CreateObject("Word.Application");
oShell1 = WScript.CreateObject("WScript.Shell");
oDoc1 = oWord1.Documents;                       
oDoc1.Add();                                                           
oSel1 = oWord1.Selection;                            
oWord1.Visible = true;                                           
oFont1 = oSel1.Font;
 
CurDir1 = oShell1.CurrentDirectory;        //текущая папка
 
with(oFont1){
    Size = 20;
    Name = "Times New Roman";
    Bold=true;
    Colorindex=2;
}
 
oSel1.TypeText("как в ворде сохранить документ");                                                                                                                                                                                                                                                                                                                                                                                                                      // word сохранение файла
 
with(oFont1){
    Size = 12;
    Bold=false;
    Colorindex=0;
}
 
with(oSel1){
     TypeParagraph();
     TypeParagraph();
}
 
with(WScript){
     TXInsert1("Name: ", Name + "");
     TXInsert1("FullName: ", FullName + "");
     TXInsert1("ScriptName: ", Name + "");
     TXInsert1("ScriptFullName: ", FullName + "");
     TXInsert1("Path: ", Path + "");
     TXInsert1("Version: ", Version + "");
     TXInsert1("Application: ", Application + "");
     TXInsert1("Timeout: ", Timeout + "");
     TXInsert1("BuildVersion: ", BuildVersion + "");
}
 
oDoc1(1).SaveAs(CurDir1 + "\WscInfo_js.doc", 0);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              // сохранение в ворде
 
function TXInsert1(a, b){
     with(oSel1){
                 oFont1.Bold=true;
                 TypeText(a);
                 EndOf();
                 oFont1.Bold=false;
                 TypeText(b);
                 TypeParagraph();
     }
}

И так, с программированием закончили, теперь можно приступить к разбору программного кода. Обратите внимание, что в примере для JSCRIPT я изменил имена переменных, добавив к ним единицу.

В самом начале происходит подключение различных классов и коллекций, которые позволяет подключить объектную модель Word, и создать новый документ. Далее следует объявление переменной CurDir, она будет хранить путь к текущему каталогу, именно в этот каталог произойдет сохранение документа в ворде. Доступ к текущему каталогу осуществляется через класс WScript.Shell – смотрите статью «Объект WScript.Shell метод ExpandEnvironmentStrings и свойство CurrentDirectory — Переменные среды Windows и текущий каталог«.

Далее с помощью класса Font – статья «Объект Word Font — параметры форматирования шрифта«, происходит настройка параметров текста: цвет, размер и так далее. После с помощью метода TypeText класса Selection происходит вставка фразы «как в ворде сохранить документ«, данная фраза также будет отформатирована: жирный шрифт и увеличенный размер символов. После мы дважды вставляет параграф – метод TypeParagraph.

Следующим этапом является использование несколько раз процедуры TXInsert, который будет передаваться два параметра: две текстовые строки. Все происходит так, что процедура вставляет в документ параметры свойств класса WScript – имя свойства и его значение.

После всей проделанной работы происходит вызов метода SaveAs, которые отвечает за сохранение файла Word. В нашем случае, в сценарии на языке VBSCRIPT произойдет сохранение документа в ворде под именем «WscInfo_vbs.doc«, а в сценарии на языке JSCRIPT – сохранение файла в ворде под именем «WscInfo_js.doc«

Автор lapin9126, 21 мая 2017, 08:33

Добрый день. Как сохранить открытый документ с другим именем, в другую папку расположенную в той же директории откуда открыт документ, и в нём выполнить макрос.
Например: документ с именем «Исходный» («С:оригиналы»), сохранить как «Исходный (копия)» в папку «обработано»(«С:оригиналыобработано») и  в  «Исходный (копия)» выполнить макрос.



Администратор

  • Administrator
  • Сообщения: 2,253
  • Записан

Исходный файл после создания копии нужно закрыть или нужно, чтобы он оставался открытым?




Администратор

  • Administrator
  • Сообщения: 2,253
  • Записан

Папка «обработано» должна быть создана (можно и с помощью макроса её создать).

Макрос

Sub Макрос()

    Dim doc As Document

        ‘ Присваиваем активному ворд-файлу имя «doc».
    Set doc = ActiveDocument

        ‘ Создание копии активного файла, при этом он закроется.
    doc.SaveAs2 FileName:=doc.Path & «обработаноИсходный (копия).docx», FileFormat:=wdFormatXMLDocument

        ‘ Здесь делаете действия с переменной «doc», которая представляет собой новый созданный файл.
    ‘ Вывод имени файла «doc» в View — Immediate Window.
    Debug.Print doc.Name

    End Sub

[свернуть]



Администратор

  • Administrator
  • Сообщения: 2,253
  • Записан

Переменную «doc» не обязательно использовать, можно и без неё обойтись:

Макрос

Sub Макрос()
    ‘ Создание копии активного файла, при этом он закроется.
    ActiveDocument.SaveAs2 FileName:=ActiveDocument.Path & «обработаноИсходный (копия).docx», FileFormat:=wdFormatXMLDocument
    ‘ Здесь делаете действия с новым созданным файлом, используя «ActiveDocument».
    ‘ Вывод имени активного файла в View — Immediate Window.
    Debug.Print ActiveDocument.Name
End Sub

[свернуть]


При сохранении файла нужно присваивать имя исходного (открытого) файла с добавлением (копия), а не конкретно «Исходный (копия)» Это для примера было.



Администратор

  • Administrator
  • Сообщения: 2,253
  • Записан
Макрос

Sub Макрос()

    Dim FN As String

        ‘1. Формирование полного имени (путь + имя) для нового файла на основе полного имени активного файла.
    ‘ Вычленение имени файла.
    FN = Left(ActiveDocument.Name, InStrRev(ActiveDocument.Name, «.») — 1)
    ‘ Добавление к имени файла фразы «(копия»).
    FN = FN & » (копия)» & «.docx»
    ‘ Добавление пути.
    FN = ActiveDocument.Path & «» & FN

        ‘2. Создание копии активного файла, при этом он закроется.
    ActiveDocument.SaveAs2 FileName:=FN, FileFormat:=wdFormatXMLDocument

        ‘3. Здесь делаете действия с новым созданным файлом, используя «ActiveDocument».
    ‘ Вывод имени активного файла в View — Immediate Window.
    Debug.Print ActiveDocument.Name

    End Sub

[свернуть]


Спасибо, чуть-чуть подправил (добавил место сохранения  & «обработано» & «»), теперь то что нужно.


  • Форум по VBA, Excel и Word

  • Word

  • Макросы в Word

  • Word: Как сохранить документ (ворд-файл) с помощью VBA?

Уважаемые форумчане, вынужден обратиться с вопросом следующего характера:
С Вашей же помощью мне удалось из кусочков составить код, который при запуске осуществляет копирование данных с листа Excelи вставляет эти данные на вновь созданный лист Word.

Но мне не удается реализовать заключительный этап своего замысла – мне необходимо вновь созданный файл Word предложить пользователю сохранить в исходной папке (папка где размещается файл Excel) с заготовкой имени файла. При этом команда на сохранение должна отдаваться именно пользователем, а не сохранятся автоматически.

Очень хочу реализовать свой замысел именно следующим образом:
1.       Запуск макроса из книги Excel.
2.       Копирование данных.
3.       Создание листа Word.
4.       Вставка данных на лист Word.
5.       Вызов диалогового окна для сохранения файла с возможностью редактировать имя файла перед его сохранением. Путь сохранения (по умолчанию) должен быть предложен в папку, в которой сохранен Исходный файл Excel. – здесь мне требуется Ваша помощь!!!
6.       После сохранения Пользователем файла завершение работы макроса.

Мне удалось найти решение этой задачи, но только в коде VBA для Word. Перечитал очень много тем, но так и не смог перевести данный код на понятный язык для Excel

Код
Sub MyFileSave() ' если запускать данный код из Word, то он полностью решает мою проблему
Dim sPath As String
 
sPath = ActiveDocument.Path & ""
'sPath = ActiveWorkbook.Path & "" ' для Excel, сэтимвродеудалосьразобраться
 
With Dialogs(wdDialogFileSaveAs) ' а вот здесь при запуске макроса вылетает ошибка.
.Name = sPath & "Переченьработ_" & Left(ActiveDocument.Paragraphs(2).Range.Text, Len(ActiveDocument.Paragraphs(2).Range.Text) - 1)
.Show
End With
End Sub

Очень прошу Вас помочь мне!
Спасибо!

Данная тема близка к моей проблеме

, но использовать под свои нужды не смог, так как в диалоговом окне не возможно выбрать расширение файла, а это мне тоже необходимо.

Пример прилагаю.

Like this post? Please share to your friends:
  • Word макрос создать кнопку
  • Word макрос размер рисунка
  • Word макрос при сохранении
  • Word макрос при печати
  • Word макрос при открытии документа