Создание нового документа 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.
Show All
SaveAs Method
Saves the specified document with a new name or format. Some of the arguments for this method correspond to the options in the Save As dialog box (File menu).
expression.SaveAs(FileName, FileFormat, LockComments, Password, AddToRecentFiles, WritePassword, ReadOnlyRecommended, EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData, SaveAsAOCELetter, Encoding, InsertLineBreaks, AllowSubstitutions, LineEnding, AddBiDiMarks)
expression Required. An expression that returns a Document
object.
FileName Optional Variant. The name for the document. The default is the current folder and file name. If the document has never been saved, the default name is used (for example, Doc1.doc). If a document with the specified file name already exists, the document is overwritten without the user being prompted first.
FileFormat Optional Variant. The format in which the document is saved. Can be any WdSaveFormat
constant. To save a document in another format, specify the appropriate value for the SaveFormat
property of the FileConverter object.
WdSaveFormat can be one of these WdSaveFormat constants. |
wdFormatDocument Saves as a Microsoft Word document. Default. |
wdFormatDOSText Saves text without formatting. Converts all section breaks, page breaks, and new line characters to paragraph marks. Uses the ANSI character set. Use this format to share documents between Word and DOS-based programs. |
wdFormatDOSTextLineBreaks Saves text without formatting. Converts all line breaks, section breaks, and page breaks to paragraph marks. Use this format when you want to maintain line breaks, for example, when transferring documents to an electronic mail system. |
wdFormatEncodedText Saves as an encoded text file. Use the Encoding argument to specify the code page to use. |
wdFormatFilteredHTML Saves text with HTML tags with minimal cascading style sheet formatting. The resulting document can be viewed in a Web browser. |
wdFormatHTML Saves all text and formatting with HTML tags so that the resulting document can be viewed in a Web browser. |
wdFormatRTF Saves all formatting. Converts formatting to instructions that other programs, including compatible Microsoft programs, can read and interpret. |
wdFormatTemplate Saves as a Word template. |
wdFormatText Saves text without formatting. Converts all section breaks, page breaks, and new line characters to paragraph marks. Uses the ANSI character set. Use this format if the destination program cannot read any of the other available file formats. |
wdFormatTextLineBreaks Saves text without formatting. Converts all line breaks, section breaks, and page breaks to paragraph marks. Use this format when you want to maintain line breaks, for example, when transferring documents to an electronic mail system. |
wdFormatUnicodeText Saves as a Unicode text file. Converts text between common character encoding standards, including Unicode 2.0, Mac OS, Windows, EUC and ISO-8859 series. |
wdFormatWebArchive Saves the text, images, and formatting as a single-file Web page. |
wdFormatXML Saves text and formatting using Extensible Markup Language (XML) and the Word XML schema. |
Other File Types To save in a file type for which there isn’t a constant, use the FileConverters object to obtain the SaveFormat property; then set the FileFormat argument to the value of the SaveFormat property. |
LockComments Optional Variant. True to lock the document for comments. The default is False.
Password Optional Variant. A password string for opening the document. (See Remarks below.)
AddToRecentFiles Optional Variant. True to add the document to the list of recently used files on the File menu. The default is True.
WritePassword Optional Variant. A password string for saving changes to the document. (See Remarks below.)
ReadOnlyRecommended Optional Variant. True to have Microsoft Word suggest read-only status whenever the document is opened. The default is False.
EmbedTrueTypeFonts Optional Variant. True to save TrueType fonts with the document. If omitted, the EmbedTrueTypeFonts argument assumes the value of the EmbedTrueTypeFonts
property.
SaveNativePictureFormat Optional Variant. If graphics were imported from another platform (for example, Macintosh), True to save only the Windows version of the imported graphics.
SaveFormsData Optional Variant. True to save the data entered by a user in a form as a data record.
SaveAsAOCELetter Optional Variant. If the document has an attached mailer, True to save the document as an AOCE letter (the mailer is saved).
Encoding Optional MsoEncoding. The code page, or character set, to use for documents saved as encoded text files. The default is the system code page.
MsoEncoding can be one of these MsoEncoding constants. |
msoEncodingArabic |
msoEncodingArabicASMO |
msoEncodingArabicAutoDetect Not used with this method. |
msoEncodingArabicTransparentASMO |
msoEncodingAutoDetect Not used with this method. |
msoEncodingBaltic |
msoEncodingCentralEuropean |
msoEncodingCyrillic |
msoEncodingCyrillicAutoDetect Not used with this method. |
msoEncodingEBCDICArabic |
msoEncodingEBCDICDenmarkNorway |
msoEncodingEBCDICFinlandSweden |
msoEncodingEBCDICFrance |
msoEncodingEBCDICGermany |
msoEncodingEBCDICGreek |
msoEncodingEBCDICGreekModern |
msoEncodingEBCDICHebrew |
msoEncodingEBCDICIcelandic |
msoEncodingEBCDICInternational |
msoEncodingEBCDICItaly |
msoEncodingEBCDICJapaneseKatakanaExtended |
msoEncodingEBCDICJapaneseKatakanaExtendedAndJapanese |
msoEncodingEBCDICJapaneseLatinExtendedAndJapanese |
msoEncodingEBCDICKoreanExtended |
msoEncodingEBCDICKoreanExtendedAndKorean |
msoEncodingEBCDICLatinAmericaSpain |
msoEncodingEBCDICMultilingualROECELatin2 |
msoEncodingEBCDICRussian |
msoEncodingEBCDICSerbianBulgarian |
msoEncodingEBCDICSimplifiedChineseExtendedAndSimplifiedChinese |
msoEncodingEBCDICThai |
msoEncodingEBCDICTurkish |
msoEncodingEBCDICTurkishLatin5 |
msoEncodingEBCDICUnitedKingdom |
msoEncodingEBCDICUSCanada |
msoEncodingEBCDICUSCanadaAndJapanese |
msoEncodingEBCDICUSCanadaAndTraditionalChinese |
msoEncodingEUCChineseSimplifiedChinese |
msoEncodingEUCJapanese |
msoEncodingEUCKorean |
msoEncodingEUCTaiwaneseTraditionalChinese |
msoEncodingEuropa3 |
msoEncodingExtAlphaLowercase |
msoEncodingGreek |
msoEncodingGreekAutoDetect Not used with this method. |
msoEncodingHebrew |
msoEncodingHZGBSimplifiedChinese |
msoEncodingIA5German |
msoEncodingIA5IRV |
msoEncodingIA5Norwegian |
msoEncodingIA5Swedish |
msoEncodingISO2022CNSimplifiedChinese |
msoEncodingISO2022CNTraditionalChinese |
msoEncodingISO2022JPJISX02011989 |
msoEncodingISO2022JPJISX02021984 |
msoEncodingISO2022JPNoHalfwidthKatakana |
msoEncodingISO2022KR |
msoEncodingISO6937NonSpacingAccent |
msoEncodingISO885915Latin9 |
msoEncodingISO88591Latin1 |
msoEncodingISO88592CentralEurope |
msoEncodingISO88593Latin3 |
msoEncodingISO88594Baltic |
msoEncodingISO88595Cyrillic |
msoEncodingISO88596Arabic |
msoEncodingISO88597Greek |
msoEncodingISO88598Hebrew |
msoEncodingISO88599Turkish |
msoEncodingJapaneseAutoDetect Not used with this method. |
msoEncodingJapaneseShiftJIS |
msoEncodingKOI8R |
msoEncodingKOI8U |
msoEncodingKorean |
msoEncodingKoreanAutoDetect Not used with this method. |
msoEncodingKoreanJohab |
msoEncodingMacArabic |
msoEncodingMacCroatia |
msoEncodingMacCyrillic |
msoEncodingMacGreek1 |
msoEncodingMacHebrew |
msoEncodingMacIcelandic |
msoEncodingMacJapanese |
msoEncodingMacKorean |
msoEncodingMacLatin2 |
msoEncodingMacRoman |
msoEncodingMacRomania |
msoEncodingMacSimplifiedChineseGB2312 |
msoEncodingMacTraditionalChineseBig5 |
msoEncodingMacTurkish |
msoEncodingMacUkraine |
msoEncodingOEMArabic |
msoEncodingOEMBaltic |
msoEncodingOEMCanadianFrench |
msoEncodingOEMCyrillic |
msoEncodingOEMCyrillicII |
msoEncodingOEMGreek437G |
msoEncodingOEMHebrew |
msoEncodingOEMIcelandic |
msoEncodingOEMModernGreek |
msoEncodingOEMMultilingualLatinI |
msoEncodingOEMMultilingualLatinII |
msoEncodingOEMNordic |
msoEncodingOEMPortuguese |
msoEncodingOEMTurkish |
msoEncodingOEMUnitedStates |
msoEncodingSimplifiedChineseAutoDetect Not used with this method. |
msoEncodingSimplifiedChineseGBK |
msoEncodingT61 |
msoEncodingTaiwanCNS |
msoEncodingTaiwanEten |
msoEncodingTaiwanIBM5550 |
msoEncodingTaiwanTCA |
msoEncodingTaiwanTeleText |
msoEncodingTaiwanWang |
msoEncodingThai |
msoEncodingTraditionalChineseAutoDetect Not used with this method. |
msoEncodingTraditionalChineseBig5 |
msoEncodingTurkish |
msoEncodingUnicodeBigEndian |
msoEncodingUnicodeLittleEndian |
msoEncodingUSASCII |
msoEncodingUTF7 |
msoEncodingUTF8 |
msoEncodingVietnamese |
msoEncodingWestern |
InsertLineBreaks Optional Variant. If the document is saved as a text file, True to insert line breaks at the end of each line of text.
AllowSubstitutions Optional Variant. If the document is saved as a text file, True allows Word to replace some symbols with text that looks similar. For example, displaying the copyright symbol as (c). The default is False.
LineEnding Optional Variant. The way Word marks the line and paragraph breaks in documents saved as text files. Can be any WdLineEndingType
constant.
WdLineEndingType can be one of these WdLineEndingType constants. |
wdCRLF Default. |
wdCROnly |
wdLFCR Not used with this method. |
wdLFOnly Not used with this method. |
wdLSPS Not used with this method. |
AddBiDiMarks Optional Variant. True adds control characters to the output file to preserve bi-directional layout of the text in the original document.
Remarks
Security Avoid using hard-coded passwords in your applications. If a password is required in a procedure, request the password from the user, store it in a variable, and then use the variable in your code. For recommended best practices on how to do this, see Security Notes for Microsoft Office Solution Developers.
Example
This example saves the active document as Test.rtf in rich-text format (RTF).
Sub SaveAsRTF()
ActiveDocument.SaveAs FileName:="Text.rtf", _
FileFormat:=wdFormatRTF
End Sub
This example saves the active document in text-file format with the file extension «.txt».
Sub SaveAsTextFile()
Dim strDocName As String
Dim intPos As Integer
'Find position of extension in filename
strDocName = ActiveDocument.Name
intPos = InStrRev(strDocName, ".")
If intPos = 0 Then
'If the document has not yet been saved
'Ask the user to provide a filename
strDocName = InputBox("Please enter the name " & _
"of your document.")
Else
'Strip off extension and add ".txt" extension
strDocName = Left(strDocName, intPos - 1)
strDocName = strDocName & ".txt"
End If
'Save file with new extension
ActiveDocument.SaveAs FileName:=strDocName, _
FileFormat:=wdFormatText
End Sub
This example loops through all the installed converters, and if it finds the WordPerfect 6.0 converter, it saves the active document using the converter.
Sub SaveWithConverter()
Dim cnvWrdPrf As FileConverter
'Look for WordPerfect file converter
'And save document using the converter
'For the FileFormat converter value
For Each cnvWrdPrf In Application.FileConverters
If cnvWrdPrf.ClassName = "WrdPrfctWin" Then
ActiveDocument.SaveAs FileName:="MyWP.doc", _
FileFormat:=cnvWrdPrf.SaveFormat
End If
Next cnvWrdPrf
End Sub
This example illustrates a procedure that saves a document with a password.
Sub SaveWithPassword(docCurrent As Document, strPWD As String)
With docCurrent
.SaveAs WritePassword:=strPWD
End With
End Sub
Автор lapin9126, 21 мая 2017, 08:33
Добрый день. Как сохранить открытый документ с другим именем, в другую папку расположенную в той же директории откуда открыт документ, и в нём выполнить макрос.
Например: документ с именем «Исходный» («С:оригиналы»), сохранить как «Исходный (копия)» в папку «обработано»(«С:оригиналыобработано») и в «Исходный (копия)» выполнить макрос.
Администратор
- Administrator
- Сообщения: 2,252
- Записан
Исходный файл после создания копии нужно закрыть или нужно, чтобы он оставался открытым?
Администратор
- Administrator
- Сообщения: 2,252
- Записан
Папка «обработано» должна быть создана (можно и с помощью макроса её создать).
Макрос
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,252
- Записан
Переменную «doc» не обязательно использовать, можно и без неё обойтись:
Макрос
Sub Макрос()
‘ Создание копии активного файла, при этом он закроется.
ActiveDocument.SaveAs2 FileName:=ActiveDocument.Path & «обработаноИсходный (копия).docx», FileFormat:=wdFormatXMLDocument
‘ Здесь делаете действия с новым созданным файлом, используя «ActiveDocument».
‘ Вывод имени активного файла в View — Immediate Window.
Debug.Print ActiveDocument.Name
End Sub
[свернуть]
При сохранении файла нужно присваивать имя исходного (открытого) файла с добавлением (копия), а не конкретно «Исходный (копия)» Это для примера было.
Администратор
- Administrator
- Сообщения: 2,252
- Записан
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?
title | keywords | f1_keywords | ms.prod | api_name | ms.assetid | ms.date | ms.localizationpriority |
---|---|---|---|---|---|---|---|
Document.SaveAs2 method (Word) |
vbawd10.chm158007864 |
vbawd10.chm158007864 |
word |
Word.SaveAs2 |
aa491007-0e31-26f5-3a5e-477381529b6e |
06/08/2017 |
medium |
Document.SaveAs2 method (Word)
Saves the specified document with a new name or format. Some of the arguments for this method correspond to the options in the Save As dialog box (File tab).
Syntax
expression. SaveAs2
( _FileName_
, _FileFormat_
, _LockComments_
, _Password_
, _AddToRecentFiles_
, _WritePassword_
, _ReadOnlyRecommended_
, _EmbedTrueTypeFonts_
, _SaveNativePictureFormat_
, _SaveFormsData_
, _SaveAsAOCELetter_
, _Encoding_
, _InsertLineBreaks_
, _AllowSubstitutions_
, _LineEnding_
, _AddBiDiMarks_
, _CompatibilityMode_
)
expression An expression that returns a Document object.
Parameters
Name | Required/Optional | Data type | Description | ||
---|---|---|---|---|---|
FileName | Optional | Variant | The name for the document. The default is the current folder and file name. If the document has never been saved, the default name is used (for example, Doc1.doc). If a document with the specified file name already exists, the document is overwritten without prompting the user. | ||
FileFormat | Optional | Variant | The format in which the document is saved. Can be any WdSaveFormat constant. To save a document in another format, specify the appropriate value for the SaveFormat property of the FileConverter object. | ||
LockComments | Optional | Variant | True to lock the document for comments. The default is False. | ||
Password | Optional | Variant | A password string for opening the document. (See Remarks below.) | ||
AddToRecentFiles | Optional | Variant | True to add the document to the list of recently used files on the File menu. The default is True. | ||
WritePassword | Optional | Variant | A password string for saving changes to the document. (See Remarks below.) | ||
ReadOnlyRecommended | Optional | Variant | True to have Microsoft Word suggest read-only status whenever the document is opened. The default is False. | ||
EmbedTrueTypeFonts | Optional | Variant | True to save TrueType fonts with the document. If omitted, the EmbedTrueTypeFonts argument assumes the value of the EmbedTrueTypeFonts property. | ||
SaveNativePictureFormat | Optional | Variant | If graphics were imported from another platform (for example, Macintosh), True to save only the Microsoft Windows version of the imported graphics. | ||
SaveFormsData | Optional | Variant | True to save the data entered by a user in a form as a record. | ||
SaveAsAOCELetter | Optional | Variant | If the document has an attached mailer, True to save the document as an AOCE letter (the mailer is saved). | ||
Encoding | Optional | Variant | The code page, or character set, to use for documents saved as encoded text files. The default is the system code page. You cannot use all MsoEncoding constants with this parameter. | ||
InsertLineBreaks | Optional | Variant | If the document is saved as a text file, True to insert line breaks at the end of each line of text. | ||
AllowSubstitutions | Optional | Variant | If the document is saved as a text file, True allows Word to replace some symbols with text that looks similar. For example, displaying the copyright symbol as (c). The default is False. | ||
LineEnding | Optional | Variant | The way Word marks the line and paragraph breaks in documents saved as text files. Can be one of the following WdLineEndingType constants: wdCRLF (default) or wdCROnly. | ||
AddBiDiMarks | Optional | Variant | True adds control characters to the output file to preserve bi-directional layout of the text in the original document. | ||
CompatibilityMode | Optional | Variant | The compatibility mode that Word uses when opening the document. WdCompatibilityMode constant.
|
Return value
Nothing
Example
The following code example saves the active document as Test.rtf in rich-text format (RTF).
Sub SaveAsRTF() ActiveDocument.SaveAs2 FileName:="Text.rtf", _ FileFormat:=wdFormatRTF End Sub
The following code example saves the active document in text-file format with the extension «.txt».
Sub SaveAsTextFile() Dim strDocName As String Dim intPos As Integer ' Find position of extension in file name strDocName = ActiveDocument.Name intPos = InStrRev(strDocName, ".") If intPos = 0 Then ' If the document has not yet been saved ' Ask the user to provide a file name strDocName = InputBox("Please enter the name " & _ "of your document.") Else ' Strip off extension and add ".txt" extension strDocName = Left(strDocName, intPos - 1) strDocName = strDocName & ".txt" End If ' Save file with new extension ActiveDocument.SaveAs2 FileName:=strDocName, _ FileFormat:=wdFormatText End Sub
The following code example loops through all the installed converters, and if it finds the WordPerfect 6.0 converter, it saves the active document using the converter.
Sub SaveWithConverter() Dim cnvWrdPrf As FileConverter ' Look for WordPerfect file converter ' And save document using the converter ' For the FileFormat converter value For Each cnvWrdPrf In Application.FileConverters If cnvWrdPrf.ClassName = "WrdPrfctWin" Then ActiveDocument.SaveAs2 FileName:="MyWP.doc", _ FileFormat:=cnvWrdPrf.SaveFormat End If Next cnvWrdPrf End Sub
The following code example shows a procedure that saves a document with a password.
Sub SaveWithPassword(docCurrent As Document, strPWD As String) With docCurrent .SaveAs2 WritePassword:=strPWD End With End Sub
See also
Document Object
[!includeSupport and feedback]
A couple quick things will get you to a solution.
The first is to loop through the worksheets in your workbook, like this:
Dim ws As Worksheet
For Each ws in ThisWorkbook.Sheets
Debug.Print "The used range is " & ws.UsedRange.Address
Next ws
The next part is to understand how adding content to a Word document is accomplished. The main concept involves where the insertion point for the document is located — generally this is the current Selection
.
When you cut and paste into a Word document, the content just pasted is still «selected». This means that any subsequent paste will effectively replace what you just inserted. So you have to move the selection point to the end of the document.
Putting it all together in an example program:
Option Explicit
Public Sub ExcelToWord()
Dim wb As Workbook
Set wb = ThisWorkbook
'--- create the Word document
Dim objWd As Word.Application
Set objWd = CreateObject("word.application")
objWd.Visible = True
Dim objDoc As Word.Document
Set objDoc = objWd.Documents.Add
objDoc.PageSetup.Orientation = 1 ' portrait = 0
Const wdPageBreak As Long = 7
Dim ws As Worksheet
For Each ws In wb.Sheets
ws.UsedRange.Copy
objWd.Selection.Paste
'--- advance the selection point to the end of
' the document and insert a page break, then
' advance the insertion point past the break
objDoc.Characters.Last.Select
objWd.Selection.InsertBreak wdPageBreak
objDoc.Characters.Last.Select
Next ws
'objDoc.SaveAs Application.ThisWorkbook.Path & ".dokument.docx"
End Sub