開発したExcelワークブックアプリケーションのマニュアルを開くための次のコードがあります。
_Sub OpenManual()
'Word.Application.Documents.Open "\\filePath\FormFlow To MSExcel\FeedSampleReport-Manual.docx"
Dim objWord As Object
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
objWord.Documents.Open "\\filePath\FormFlow To MSExcel\FeedSampleReport-Manual.docx"
End Sub
_
これは私に2つの問題を与えます:
そのダイアログで[OK]をクリックすると、[名前を付けて保存]画面が表示されます。
それをキャンセルして、空白のMicrosoft Wordインスタンスを閉じようとすると、次のようになります。
グローバルテンプレートNormalに影響する変更が加えられました。これらの変更を保存しますか?
次に、[いいえ]をクリックすると、すべてが最終的に閉じます。
誰かがこれらの2つの問題で私を助けることができますか?どういうわけかオブジェクトを解放する必要がありますか?これは今まで見たことがありません。
[〜#〜]編集[〜#〜]:
@ Layman-Codersメソッドを試した後:
_Sub OpenManual()
'Word.Application.Documents.Open "\\filePath\FormFlow To MSExcel\FeedSampleReport-Manual.docx"
'Open an existing Word Document from Excel
Dim objWord As Object
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
' Should open as the forefront
objWord.Activate
'Change the directory path and file name to the location
'of the document you want to open from Excel
objWord.Documents.Open "\\filePath\FormFlow To MSExcel\FeedSampleReport-Manual.docx"
objWord.Quit
Set objWord = Nothing
End Sub
_
もう1つのWord文書を開いてボタンをクリックすると、次のようになります。
This file is in use by another application or user. (C:\Users\Me\AppData\...\Normal.dotm)
を受け取りますChanges have been made that affect the global template, Normal. Do you want to save those change?
_が表示されます。[いいえ]をクリックすると、ドキュメントが閉じます。このドキュメントが私が開いているWordの最初のインスタンスである場合:
objWord.Quit
_行にヒットするとすぐに、ドキュメントはすぐに閉じます。ドキュメントを最前線に開いて、ユーザーが必要なときにマニュアルを表示して支援を求め、自分の裁量でドキュメントを閉じることができるようにしたいと思っています。
したがって、グローバルテンプレートを保存するように要求するWordで発生している問題は、通常のテンプレートに対する権限を持つコピーWordが既に開いているためです。 CreateObject
を使用してWordオブジェクトを設定すると、Wordが再度読み込まれ、通常のテンプレートが読み取り専用として開きます。
あなたがする必要があるのは、Wordが開いているかどうか、そしてそれがWordのそのコピーをつかんでいるかどうかをチェックすることです。そうでない場合は、Wordを開くことができます。
Sub OpenManual()
Dim objWord As Object
'We need to continue through errors since if Word isn't
'open the GetObject line will give an error
On Error Resume Next
Set objWord = GetObject(, "Word.Application")
'We've tried to get Word but if it's nothing then it isn't open
If objWord Is Nothing Then
Set objWord = CreateObject("Word.Application")
End If
'It's good practice to reset error warnings
On Error GoTo 0
'Open your document and ensure its visible and activate after openning
objWord.Documents.Open "\\filePath\FormFlow To MSExcel\FeedSampleReport-Manual.docx"
objWord.Visible = True
objWord.Activate
Set objWord = Nothing
End Sub
もう1つの優れたコード行は、表示アラートを抑制することです。これにより、「保存しますか」タイプのダイアログボックスが表示されなくなります。
objWord.DisplayAlerts = 0
次のようなものを試してください。
Sub OpenManual()
'Word.Application.Documents.Open "\\filePath\FormFlow To MSExcel\FeedSampleReport-Manual.docx"
Dim objWord As Object
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
objWord.Activate 'Should make it the forefront (1)
objWord.Documents.Open "\\filePath\FormFlow To MSExcel\FeedSampleReport-Manual.docx"
'If you just want to close it afterwards...
objWord.Quit 'Changes are discarded
'Either way, you should have the following somewhere
Set objWord = Nothing
End Sub
オブジェクトを何にも設定しないと、接続が失われるはずです
私も同じ問題を抱えていました。そして、以下のコードだけがこのWordウィンドウを閉じました:
Dim X As Variant
X = Shell("powershell.exe kill -processname winword", 1)
私は答えの1つでこのコードを見つけました Excel vbaからWordアプリケーションを閉じる