6

私が開発した 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つの問題が発生します。

  1. ドキュメントは開きますが、バックグラウンドで開きます。ユーザーは、タスクバーで Microsoft Word をチェックすることを知らない限り、ドキュメントが開かれたことを知りません。
  2. 受け取った Word 文書を閉じようとすると: このファイルは別のアプリケーションまたはユーザーによって使用されています。(C:\Users\Me\AppData...\Normal.dotm)

そのダイアログで [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. マニュアルが一番手前に開くが、すぐに受け取るThis file is in use by another application or user. (C:\Users\Me\AppData\...\Normal.dotm)
  2. [OK] を押すと、[名前を付けて保存] ダイアログが表示されます。
  3. [名前を付けて保存] ダイアログをキャンセルすると、マニュアル ドキュメントが表示されます。
  4. 赤い X をクリックしてドキュメントをChanges have been made that affect the global template, Normal. Do you want to save those change?閉じると、[いいえ] をクリックするとドキュメントが閉じます。

この文書が単語​​の最初のインスタンスである場合、私は開いています:

  1. ドキュメントが開きます。
  2. コードがそのobjWord.Quit行に到達するとすぐに、ドキュメントはすぐに閉じます。

ドキュメントを最前面に開いて、ユーザーが必要なときにマニュアルを表示して、自分の裁量でドキュメントを閉じられるようにしたいだけです。

4

3 に答える 3

11

したがって、グローバル テンプレートを保存するように求める Word で発生している問題は、Normal テンプレートに対する権限を持つ 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

于 2013-06-19T21:01:34.197 に答える
3

次のようなことを試してください:

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

オブジェクトを何も設定しないと、接続が解消されます

于 2013-06-18T20:53:36.297 に答える