- Remove From My Forums
-
Question
-
A novice at automating MS Office, I’m programming Word from Visual FoxPro, and have run into the problem that if a user tries to open a document that’s already open, nothing appears to happen since it encounters a «File in use» error, which the
user can’t see since it opens behind another window. In this particular application it would be satisfactory simply to close any open documents each time an attempt is made from the menu to open another document regardless of whether there’s a conflict. And
that’s better anyway since otherwise users will be confused.Here is my initial test of the method I thought might accomplish that:
oWord = GETOBJECT(, «Word.Application»)
? oWord.Documents.Count
FOR i=1 TO oWord.Documents.Count
? oWord.Documents(i).Name
oWord.Documents(i).Close()
ENDFORAnd that worked, at first, although oWord.Documents.Count was always = 1 since the already opened documents belonged to separate instances of Word, being opened by the code below. But at least I was able to run the above code again and again to close each
remaining document one at a time, so the method seemed promising.NMBRLTRS=ALEN(ARC_LETRS)
FOR I = 1 TO NMBRLTRS
oWord = CREATEOBJECT( «Word.Application» )
oWord.Visible = .T.
FULLPATH=ACDBF + ‘Correspondence’ + ARC_LETRS(I)
sDoc = FULLPATH
oWord.Documents.Open( sDoc, 0, 0 ) && parm 3 read only = not
RELEASE oWord
ENDFORTo improve the situation, I re-wrote the code just above to open all the previously opened docs in the same Word instance, but then the little program for closing them stopped working, reporting oWord.Documents.Count as 0 each time I tried it. And that happened
even when I put back the code just above.So now I’m mystified.
Am I going about this the wrong way anyway?
Thanks in advance for your help.
Peyton
-
Edited by
Thursday, October 31, 2013 9:49 PM
-
Edited by
Answers
-
Hi Peyton
I believe this article explains why this is happening
http://support.microsoft.com/kb/238975/en-us
In the .NET world, it’s possible to work with processes, which makes it simpler to get to these things. Not sure if/how you can do that with VFP — it would certainly involve the Windows API…
Cindy Meister, VSTO/Word MVP,
my blog-
Marked as answer by
Luna Zhang — MSFT
Monday, November 11, 2013 9:04 AM
-
Marked as answer by
title | ms.prod | ms.assetid | ms.date | ms.localizationpriority |
---|---|---|---|---|
Working with Document Objects |
word |
af304f65-6cdd-ff7d-a81f-cce0161f2b47 |
06/08/2019 |
medium |
Working with Document Objects
In Visual Basic, the methods for modifying files are methods of the Document object or the Documents collection. This topic includes Visual Basic examples related to the tasks identified in the following sections.
Creating a new document
The Documents collection includes all of the open documents. To create a new document, use the Add method to add a Document object to the Documents collection. The following instruction creates a document.
A better way to create a document is to assign the return value to an object variable. The Add method returns a Document object that refers to the new document. In the following example, the Document object returned by the Add method is assigned to an object variable. Then, several properties and methods of the Document object are set. You can easily control the new document using an object variable.
Sub NewSampleDoc() Dim docNew As Document Set docNew = Documents.Add With docNew .Content.Font.Name = "Tahoma" .SaveAs FileName:="Sample.doc" End With End Sub
Opening a document
To open an existing document, use the Open method with the Documents collection. The following instruction opens a document named Sample.doc located in the MyFolder folder.
Sub OpenDocument() Documents.Open FileName:="C:MyFolderSample.doc" End Sub
Saving an existing document
To save a single document, use the Save method with the Document object. The following instruction saves the document named Sales.doc.
Sub SaveDocument() Documents("Sales.doc").Save End Sub
You can save all open documents by applying the Save method to the Documents collection. The following instruction saves all open documents.
Sub SaveAllOpenDocuments() Documents.Save End Sub
Saving a new document
To save a single document, use the SaveAs2 method with a Document object. The following instruction saves the active document as «Temp.doc» in the current folder.
Sub SaveNewDocument() ActiveDocument.SaveAs FileName:="Temp.doc" End Sub
The FileName argument can include only the file name or the complete path (for example, «C:DocumentsTemporary File.doc»).
Closing documents
To close a single document, use the Close method with a Document object. The following instruction closes and saves the document named Sales.doc.
Sub CloseDocument() Documents("Sales.doc").Close SaveChanges:=wdSaveChanges End Sub
You can close all open documents by applying the Close method of the Documents collection. The following instruction closes all documents without saving changes.
Sub CloseAllDocuments() Documents.Close SaveChanges:=wdDoNotSaveChanges End Sub
The following example prompts the user to save each document before the document is closed.
Sub PromptToSaveAndClose() Dim doc As Document For Each doc In Documents doc.Close SaveChanges:=wdPromptToSaveChanges Next End Sub
Activating a document
To change the active document, use the Activate method with a Document object. The following instruction activates the open document named Sales.doc.
Sub ActivateDocument() Documents("Sales.doc").Activate End Sub
Determining if a document is open
To determine if a document is open, you can enumerate the Documents collection by using a For Each…Next statement. The following example activates the document named Sample.doc if the document is open, or opens Sample.doc if it is not currently open.
Sub ActivateOrOpenDocument() Dim doc As Document Dim docFound As Boolean For Each doc In Documents If InStr(1, doc.Name, "sample.doc", 1) Then doc.Activate docFound = True Exit For Else docFound = False End If Next doc If docFound = False Then Documents.Open FileName:="Sample.doc" End Sub
Referring to the active document
Instead of referring to a document by name or by index number—for example, Documents("Sales.doc")
—the ActiveDocument property returns a Document object that refers to the active document (the document with the focus). The following example displays the name of the active document, or if there are no documents open, it displays a message.
Sub ActiveDocumentName() If Documents.Count >= 1 Then MsgBox ActiveDocument.Name Else MsgBox "No documents are open" End If End Sub
[!includeSupport and feedback]
I’m trying in the beginning of my macro to close all word application if it’s open, although I don’t no which documents are open, and I can’t set them as an object.
Thanks.
asked Dec 12, 2016 at 12:11
1
This will close all running Word documents.
You need On Error Resume Next
to prevent errors if no Word application instance is running.
Option Explicit
Sub CloseWordDocuments()
Dim objWord As Object
Do
On Error Resume Next
Set objWord = GetObject(, "Word.Application")
On Error Go To 0
If Not objWord Is Nothing Then
objWord.Quit
Set objWord = Nothing
End If
Loop Until objWord Is Nothing
End Sub
Edit
Correction below because the loop above has a flaw i.e. it will exit after the first instance of Word is closed …
Option Explicit
Sub CloseWordDocuments()
Dim objWord As Object
Dim blnHaveWorkObj As Boolean
' assume a Word object is there to be quit
blnHaveWorkObj = True
' loop until no Word object available
Do
On Error Resume Next
Set objWord = GetObject(, "Word.Application")
If objWord Is Nothing Then
' quit loop
blnHaveWorkObj = False
Else
' quit Word
objWord.Quit
' clean up
Set objWord = Nothing
End If
Loop Until Not blnHaveWorkObj
End Sub
answered Dec 12, 2016 at 12:22
Robin MackenzieRobin Mackenzie
18.1k7 gold badges41 silver badges54 bronze badges
1
Try the code below, it will close Word Application (without saving).
Option Explicit
Sub CloseWordWindows()
Dim objWord As Object
On Error Resume Next
Set objWord = GetObject(, "Word.Application")
' if no active Word is running >> exit Sub
If objWord Is Nothing Then
Exit Sub
End If
objWord.Quit
Set objWord = Nothing
End Sub
answered Dec 12, 2016 at 12:18
Shai RadoShai Rado
32.9k6 gold badges26 silver badges51 bronze badges
3
Another option is to use Shell
to accesss the elegance of powershell
Sub Comesfast()
X = Shell("powershell.exe kill -processname winword", 1)
End Sub
answered Mar 28, 2017 at 6:58
brettdjbrettdj
54.6k16 gold badges113 silver badges176 bronze badges
Word |
Close all open Word documents and quit Word |
|
Ease of Use |
Easy |
|
Version tested with |
2000, 2003 |
|
Submitted by: |
MOS MASTER |
|
Description: |
Programmatically close all open Word documents and quit Word. |
|
Discussion: |
You want an easy way to close all open documents and want to quit Word at the same time. The sub below provides that. If you need to save every doc then change [b]SaveChanges to wdSaveChanges[/b] Important: this sub has to run global in Normal.dot or an addin to perform correctly and quit Word after execution. |
|
|
instructions for use |
|
|
||
How to use: |
|
|
Test the code: |
|
|
Sample File: |
Close all open Word documents and quit Word.zip 5.37KB |
|
Approved by mdmackillop |
||
This entry has been viewed 137 times. |
||
In today’s article, we want to share you 2 ways to quickly save or close all open Word documents.
More often than not, when we are surfing on the Internet, we would like to open multiple web pages at the same time. Things are the same when we are dealing with Word documents. After making revisions or just simply looking through, some of you may bother to save and close them one by one.
Then how about learning some cool tricks to save your valuable time? Here are 2 ways you may find useful.
Method 1: Use “Save All” or “Close All” Feature
“Save All” and “Close All” are exactly tailored features that Word holds for its users. But things vary when different versions of Word are involved.
Case 1: In Word 2003
For users of Word 2003, when you click “File” on toolbar, you can see the “Save” and “Close” features, such as below:
However, if you press “Shift” and hold on, then click “File”, you will notice “Save” and “Close” have changed into “Save All” and “Close All” respectively. Next, you can click either of them to fulfill your task.
Case 2: In Word 2007 and Later Versions
It’s been universally known that there is a section called Ribbon in Word 2007 and later versions of Word. Meanwhile, the “Save All” and “Close All” features are still available only after you add them to “Quick Access Toolbar”. Here are steps of how you can realize that:
- Firstly, click “File” tab.
- Secondly, click “Options” to open “Word Options” dialog box.
- Then click “Quick Access Toolbar” on the left-side column.
- Next choose “Commands Not in the Ribbon” from the drop-list of “Choose commands from”.
- Find and click “Close All”.
- Then click “Add”.
- Similarly, find and click “Save All” and click “Add”.
- Lastly, click “OK”.
Now you can click “Save All” to save all the changes you made in all documents open.
When you click “Close All”, you can close them all at once if you’ve saved them. If not, there will be boxes popping up, asking whether you want to save the change. And you will have to click “Save” for several times before close them off.
Method 2: Use VBA Codes
You have to know the VBA editor is such a wonderful tool which gets your customized commands done so perfectly and proficiently.
Just open Word first, and press “Alt+ F11”, then you will have the VBA editor open. Go and paste codes there and click “Run”. The mission will be accomplished in a jiffy.
Still, we will focus on 3 differentiating situations where the codes will defer a bit from one to another.
Situation 1: For Read Only
It’s likely that we open many documents just to read and compare. Thus no modification is made. Then you will need the following codes:
Sub CloseAllOpenWordDocuments() Word.Application.Documents.Close End Sub
Situation 2: Save Documents without Asking
The prompting box asking whether you want to save a file can be annoying sometimes. Then following codes are exactly what you will need:
Sub SaveAllOpenWordFocuments() Word.Application.Documents.Save NoPrompt:=True End Sub
And for those newly created documents, you will receive “Save As” window directly, where you can choose the storage location.
By the way, if you want to auto save your files, you can go to “File”, then click “Options”. And click “Save” in “Word Options” dialog box. Next you can change the period time for auto save.
Situation 3: Close and Save Documents Simultaneously
After making the last piece of revision, you need to save and close all open documents. Now with the bellowing codes, you will be able to accomplish them at once.
Sub CloseAndSaveAllOpenWordDocuments() Word.Application.Documents.Save NoPrompt:=True Word.Application.Documents.Close End Sub
In order to use them the codes easily next time, you may want to add these macros to “Quick Access Toolbar”. For specific steps, please read How to Quickly Invoke another Application from MS Word
Cope with Word Collapse
No one can be immune to data loss. The bad luck can track you down all of a sudden. This is true to Word. Given to the fact that we use it almost every day, it would be an unimaginable catastrophe to have Word crushed, meaning your files are in great danger. Once documents get compromised, you can choose to recover them by using corrupt Word file recovery program.
Author Introduction:
Vera Chen is a data recovery expert in DataNumen, Inc., which is the world leader in data recovery technologies, including Excel data damage fix tool and pdf repair software products. For more information visit www.datanumen.com
Содержание
- Метод Application.Quit (Word)
- Синтаксис
- Параметры
- Пример
- См. также
- Поддержка и обратная связь
- Метод Document.Close (Word)
- Синтаксис
- Параметры
- Пример
- См. также
- Поддержка и обратная связь
- Application.Quit method (Word)
- Syntax
- Parameters
- Example
- See also
- Support and feedback
- Работа с объектами документа
- Создание нового документа
- Открытие документа
- Сохранение существующего документа
- Сохранение нового документа
- Закрытие документов
- Активация документа
- Определение того, открыт ли документ
- Ссылка на активный документ
- Поддержка и обратная связь
- Document.Close method (Word)
- Syntax
- Parameters
- Example
- See also
- Support and feedback
Метод Application.Quit (Word)
Завершает работу с Microsoft Word и при необходимости сохраняет или маршрутизирует открытые документы.
Синтаксис
expression. Выход (SaveChanges, OriginalFormat, RouteDocument)
выражение (обязательно). Переменная, представляющая объект Application .
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Savechanges | Необязательный | Variant | Указывает, сохраняет ли Word измененные документы перед закрытием. Может быть одной из констант WdSaveOptions . |
OriginalFormat | Необязательный | Variant | Указывает способ, которым Word сохраняет документы, исходный формат которых не был форматом документа Word. Может быть одной из констант WdOriginalFormat . |
RouteDocument | Необязательный | Variant | Значение true для маршрутизации документа следующему получателю. Если документ не имеет прикрепленного скольжения маршрутизации, этот аргумент игнорируется. |
Пример
В этом примере приложение Word закрывается и пользователю предлагается сохранить каждый документ, который изменился с момента последнего сохранения.
В этом примере пользователю предлагается сохранить все документы. Если пользователь нажимает кнопку Да, все документы сохраняются в формате Word до закрытия Word.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Метод Document.Close (Word)
Закрывает указанный документ.
Синтаксис
expression. Close (SaveChanges, OriginalFormat, RouteDocument)
выражение (обязательно). Переменная, представляющая объект Document .
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Savechanges | Необязательный | Variant | Указывает действие сохранения для документа. Может быть одной из следующих констант WdSaveOptions : wdDoNotSaveChanges, wdPromptToSaveChanges или wdSaveChanges. |
OriginalFormat | Необязательный | Variant | Задает формат сохранения документа. Может быть одной из следующих констант WdOriginalFormat : wdOriginalDocumentFormat, wdPromptUser или wdWordDocument. |
RouteDocument | Необязательный | Variant | Значение true для маршрутизации документа следующему получателю. Если документ не имеет прикрепленного скольжения маршрутизации, этот аргумент игнорируется. |
Пример
В этом примере пользователю предлагается сохранить активный документ перед закрытием. Если пользователь нажимает кнопку Отмена, возникает ошибка 4198 (сбой команды) и отображается сообщение.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Application.Quit method (Word)
Quits Microsoft Word and optionally saves or routes the open documents.
Syntax
expression.Quit (SaveChanges, OriginalFormat, RouteDocument)
expression Required. A variable that represents an Application object.
Parameters
Name | Required/Optional | Data type | Description |
---|---|---|---|
SaveChanges | Optional | Variant | Specifies whether Word saves changed documents before closing. Can be one of the WdSaveOptions constants. |
OriginalFormat | Optional | Variant | Specifies the way Word saves documents whose original format was not Word Document format. Can be one of the WdOriginalFormat constants. |
RouteDocument | Optional | Variant | True to route the document to the next recipient. If the document does not have a routing slip attached, this argument is ignored. |
Example
This example closes Word and prompts the user to save each document that has changed since it was last saved.
This example prompts the user to save all documents. If the user clicks Yes, all documents are saved in the Word format before Word closes.
See also
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
Работа с объектами документа
В Visual Basic методы изменения файлов являются методами объекта Document или коллекции Documents . В этом разделе приведены примеры Visual Basic, связанные с задачами, определенными в следующих разделах.
Создание нового документа
Коллекция Documents включает все открытые документы. Чтобы создать документ, используйте метод Add , чтобы добавить объект Document в коллекцию Documents . Следующая инструкция создает документ.
Лучший способ создания документа — назначить возвращаемое значение переменной объекта. Метод Add возвращает объект Document , который ссылается на новый документ. В следующем примере объект Document , возвращенный методом Add , назначается переменной объекта . Затем задаются несколько свойств и методов объекта Document . Вы можете легко управлять новым документом с помощью объектной переменной.
Открытие документа
Чтобы открыть существующий документ, используйте метод Open с коллекцией Documents . Следующая инструкция открывает документ с именем Sample.doc, расположенный в папке MyFolder.
Сохранение существующего документа
Чтобы сохранить один документ, используйте метод Save с объектом Document . Следующая инструкция сохраняет документ с именем Sales.doc.
Вы можете сохранить все открытые документы, применив метод Save к коллекции Documents . Следующая инструкция сохраняет все открытые документы.
Сохранение нового документа
Чтобы сохранить один документ, используйте метод SaveAs2 с объектом Document . Следующая инструкция сохраняет активный документ как «Temp.doc» в текущей папке.
Аргумент FileName может включать только имя файла или полный путь (например, «C:DocumentsTemporary File.doc»).
Закрытие документов
Чтобы закрыть один документ, используйте метод Close с объектом Document . Следующая инструкция закрывает и сохраняет документ с именем Sales.doc.
Вы можете закрыть все открытые документы, применив метод Close коллекции Documents . Следующая инструкция закрывает все документы без сохранения изменений.
В следующем примере пользователю предлагается сохранить каждый документ перед закрытием документа.
Активация документа
Чтобы изменить активный документ, используйте метод Activate с объектом Document . Следующая инструкция активирует открытый документ с именем Sales.doc.
Определение того, открыт ли документ
Чтобы определить, открыт ли документ, можно перечислить коллекцию Documents с помощью параметра For Each. Следующая инструкция. В следующем примере документ с именем Sample.doc активируется, если документ открыт, или открывается Sample.doc, если он в настоящее время не открыт.
Ссылка на активный документ
Вместо ссылки на документ по имени или по номеру индекса, например, Documents(«Sales.doc») свойство ActiveDocument возвращает объект Document , ссылающийся на активный документ (документ с фокусом). В следующем примере отображается имя активного документа или, если документы не открыты, отображается сообщение.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Document.Close method (Word)
Closes the specified document.
Syntax
expression.Close (SaveChanges, OriginalFormat, RouteDocument)
expression Required. A variable that represents a Document object.
Parameters
Name | Required/Optional | Data type | Description |
---|---|---|---|
SaveChanges | Optional | Variant | Specifies the save action for the document. Can be one of the following WdSaveOptions constants: wdDoNotSaveChanges, wdPromptToSaveChanges, or wdSaveChanges. |
OriginalFormat | Optional | Variant | Specifies the save format for the document. Can be one of the following WdOriginalFormat constants: wdOriginalDocumentFormat, wdPromptUser, or wdWordDocument. |
RouteDocument | Optional | Variant | True to route the document to the next recipient. If the document does not have a routing slip attached, this argument is ignored. |
Example
This example prompts the user to save the active document before closing it. If the user clicks Cancel, error 4198 (command failed) is trapped and a message is displayed.
See also
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник