Word文書がすでに開かれているかどうかを確認します+エラー処理

クリスチャンゴールド

こんにちは、よろしくお願いします。

Excel-vbaを使用してWord文書を開き、新しい名前で保存しています。これは実際には正常に機能しています。

ただし、新しい名前のWord文書が既に開かれていると、問題が発生します。

スクリプトを実行するためのボタンがあり、ユーザーが2回目にスクリプトを実行し、作成されたファイルを開いたままにしているとします。ユーザーはExcelで何かを変更する可能性があり、新しいWord文書があとがきのように見えるかどうかを確認したいと考えています。彼はもう一度ボタンをクリックします。テンプレートを開いて(すべての変更を行い)保存しようとしますが、既に開いているためできません。このドキュメントは、新しいファイルではなく古い名前(テンプレート)で保存される可能性があります。そのため、テンプレートファイルを上書きして破棄します(テスト中にこれを数回取得しました)。

したがって、適切なコードとより優れたエラー処理が必要です。私の最初の考えは、ファイル名の付いたドキュメントがすでに存在するかどうかを確認することです。しかし、それはその仕事を完全には行いません:

Sub CreateWordDocument()
    Dim TemplName, CurrentLocation, DocumentName, Document As String
    Dim WordDoc, WordApp, OutApp As Object

    With table1
        TemplName = table1.Range("A1").Value 'Get selected template name
        CurrentLocation = Application.ActiveWorkbook.Path 'working folder
        Template = CurrentLocation + "\" + TemplName
        DocumentName = .Range("A2").Value
        Document = CurrentLocation + "\" + DocumentName + ".docx"

    'Open Word Template
    On Error Resume Next 'if Word is already running
    Set WordApp = GetObject("Word.Application")
    If Err.Number <> 0 Then
        'Launch a new instance of Word
        Err.Clear
        Set WordApp = CreateObject("Word.Application")
        WordApp.Visible = True 'Make the application visible to the user
    End If

    'if document is already opened in word than close it
    'if its not possible to close it - end application to prevent any damage to the template
    On Error GoTo notOpen
        Set WordDoc = WordApp.Documents(DocumentName + ".docx")
    On Error GoTo closeError
        WordDoc.Close
    notOpen:
        'Open the template
        Set WordDoc = WordApp.Documents.Open(Filename:=Template, ReadOnly:=False) 'Open Template
    'save with new name
    WordDoc.SaveAs Document
    closeError: 
    'open a message box and tell user to close and run again.

現在の段階では、「Set WordDoc = WordApp ....」からnotOpenedにジャンプします。この問題を解決する方法について何か提案はありますか?

ダレン・バートラップ-クック

この関数を追加します。

Public Function FileIsOpen(FullFilePath As String) As Boolean

    Dim ff As Long

    On Error Resume Next

    ff = FreeFile()
    Open FullFilePath For Input Lock Read As #ff
    Close ff
    FileIsOpen = (Err.Number <> 0)

    On Error GoTo 0

End Function 

次に、コードで使用します。

If Not FileIsOpen(DocumentName & ".docx") Then
    Set WordDoc = WordApp.Documents.Open(Filename:=Template, ReadOnly:=False)
Else
    'Do something else because the file is already open.
End If

ドキュメント名は、ドキュメントへのフルパスである必要があります。


他のいくつか:

Documentは文字列のみOutAppあり、オブジェクトです。他のすべての変数はVariantsです。

Dim TemplName, CurrentLocation, DocumentName, Document As String  
Dim WordDoc, WordApp, OutApp As Object

そのはず:

Dim TemplName As String, CurrentLocation As String, DocumentName As String, Document As String
Dim WordDoc As Object, WordApp As Object, OutApp As Object 

VBAは通常+、加算と&連結に使用ます。

DocumentName + ".docx"  

次のように書く方が良いでしょう

DocumentName & ".docx"  

ドキュメントはの予約語ですWordコードが含まれているので、ここではそれほど問題にはならないはずですがExcel、覚えておくべきことがあります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

私のワークブック(Excel)がWord文書から開いているかどうかを確認するにはどうすればよいですか?

分類Dev

ブラウザがすでにURLを開いているかどうかを確認します

分類Dev

ITextライターを使用してPDFが開かれているかどうかを確認します

分類Dev

辞書のキーであるリストに単語が含まれているかどうかをどのように確認しますか?

分類Dev

ガトリングを使用して、リクエストが特定の時間内に処理されているかどうかを確認できますか?

分類Dev

指定されたパスでWindowsエクスプローラーが既に開いているかどうかを確認します

分類Dev

ラテックスコードがPandocまたは* texによって処理されているかどうかを確認します

分類Dev

別のエラーによってすでに処理されているエラーを処理するにはどうすればよいですか?

分類Dev

Gensim Word2VecがCコンパイラを使用しているかどうかを確認するにはどうすればよいですか?

分類Dev

フォームを取得して、それ自体がすでに開いているかどうかを確認します

分類Dev

C#相互運用機能を使用して、Word文書のどのページに形状/画像が配置されているかを確認する方法

分類Dev

文字列(つまり文)のリストを反復処理して、特定の単語が含まれているかどうかを確認するにはどうすればよいですか?

分類Dev

キーのリストのいずれかが辞書に存在するかどうかを確認します

分類Dev

誰かがC ++でルーターに配線されているかどうかを確認します

分類Dev

ユーザー名がすでにArrayListに登録されているかどうかを確認します

分類Dev

UiPathは、ロボットサービスがInvalidOperationExceptionで開始されているかどうかを確認するように指示します

分類Dev

角度がすでにロードされているかどうかを確認し、最新バージョンで上書きします

分類Dev

ディレクトリがWindows10エクスプローラーで開かれているかどうかを確認します

分類Dev

指定されたキーが辞書にすでに存在するかどうかを確認します

分類Dev

Pythonは、辞書内の値である数値がすでにリストにあるかどうか、および数値が異なるまで再生成されるかどうかを確認します-構文エラー

分類Dev

WorkManagerがすでにスケジュールされているかどうかを確認します

分類Dev

リスナーがすでに設定されているかどうかを確認します

分類Dev

サービスがすでに実行されているかどうかを確認します

分類Dev

辞書のいずれかのキーに値があるかどうかを確認します

分類Dev

プログラムでMS-Word文書を開いて編集し、保存するにはどうすればよいですか?

分類Dev

RaspberryPi-Python-ドライブが書き込まれているかどうかを確認します

分類Dev

キーが押されているかどうかを確認しますか?

分類Dev

シートセルにエラーが含まれているかどうかを確認するにはどうすればよいですか?

分類Dev

パイプにデータを書き込んだ後、Cアプリケーションがハングします。「猫」の処理が行われたかどうかを確認するにはどうすればよいですか?

Related 関連記事

  1. 1

    私のワークブック(Excel)がWord文書から開いているかどうかを確認するにはどうすればよいですか?

  2. 2

    ブラウザがすでにURLを開いているかどうかを確認します

  3. 3

    ITextライターを使用してPDFが開かれているかどうかを確認します

  4. 4

    辞書のキーであるリストに単語が含まれているかどうかをどのように確認しますか?

  5. 5

    ガトリングを使用して、リクエストが特定の時間内に処理されているかどうかを確認できますか?

  6. 6

    指定されたパスでWindowsエクスプローラーが既に開いているかどうかを確認します

  7. 7

    ラテックスコードがPandocまたは* texによって処理されているかどうかを確認します

  8. 8

    別のエラーによってすでに処理されているエラーを処理するにはどうすればよいですか?

  9. 9

    Gensim Word2VecがCコンパイラを使用しているかどうかを確認するにはどうすればよいですか?

  10. 10

    フォームを取得して、それ自体がすでに開いているかどうかを確認します

  11. 11

    C#相互運用機能を使用して、Word文書のどのページに形状/画像が配置されているかを確認する方法

  12. 12

    文字列(つまり文)のリストを反復処理して、特定の単語が含まれているかどうかを確認するにはどうすればよいですか?

  13. 13

    キーのリストのいずれかが辞書に存在するかどうかを確認します

  14. 14

    誰かがC ++でルーターに配線されているかどうかを確認します

  15. 15

    ユーザー名がすでにArrayListに登録されているかどうかを確認します

  16. 16

    UiPathは、ロボットサービスがInvalidOperationExceptionで開始されているかどうかを確認するように指示します

  17. 17

    角度がすでにロードされているかどうかを確認し、最新バージョンで上書きします

  18. 18

    ディレクトリがWindows10エクスプローラーで開かれているかどうかを確認します

  19. 19

    指定されたキーが辞書にすでに存在するかどうかを確認します

  20. 20

    Pythonは、辞書内の値である数値がすでにリストにあるかどうか、および数値が異なるまで再生成されるかどうかを確認します-構文エラー

  21. 21

    WorkManagerがすでにスケジュールされているかどうかを確認します

  22. 22

    リスナーがすでに設定されているかどうかを確認します

  23. 23

    サービスがすでに実行されているかどうかを確認します

  24. 24

    辞書のいずれかのキーに値があるかどうかを確認します

  25. 25

    プログラムでMS-Word文書を開いて編集し、保存するにはどうすればよいですか?

  26. 26

    RaspberryPi-Python-ドライブが書き込まれているかどうかを確認します

  27. 27

    キーが押されているかどうかを確認しますか?

  28. 28

    シートセルにエラーが含まれているかどうかを確認するにはどうすればよいですか?

  29. 29

    パイプにデータを書き込んだ後、Cアプリケーションがハングします。「猫」の処理が行われたかどうかを確認するにはどうすればよいですか?

ホットタグ

アーカイブ