[[20230128002842]] 『VBAから開いているワードファイルを取得する』(フォーキー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAから開いているワードファイルを取得する』(フォーキー)

いつもお世話になっております。
ワードファイルをVBAから開くコードを作成しています。

同じ名前のファイルを開いていた場合、処理を終了したいのですが、判定が上手くいきません。

 sub test
     Dim doc
     With CreateObject("Word.Application")
         .Visible = True
         '同じ名前のファイルを開いていた場合は終了
         For Each doc In .Documents
             If "テスト.docx" = doc.Name Then
                 MsgBox "閉じてから実行してください。", vbOKOnly + vbExclamation
                 Exit Sub
             End If
         Next
     End With
 End Sub

あらかじめ「テスト」ファイルを開いて実行しているんですが、例えば

 Debug.Print .Documents.Count
とドキュメントの数を調べても0が返ります。

VBAから開いた場合、カウントは1になりますが、あらかじめ開いているドキュメントは何故かカウントされません。
(ひとつはあらかじめ、ひとつはVBAから開いた2つのドキュメントがあっても、カウントは1になります)

原因や、あるいは別の手段等があればよろしくお願いいたします。

< 使用 Excel:Excel2021、使用 OS:Windows11 >


 CreateObject("Word.Application") しちゃったら、そのWordアプリケーションは
 すでに起動しているWordとは別人です Wordを二重起動している状態です

 既に起動済みのWordアプリケーションを捕まえないといけないです。

 Sub sample()
   Dim wdApp As Word.Application
   Dim doc As Word.Document
   Set wdApp = GetObject(, "Word.Application")
   For Each doc In wdApp.Documents
       Debug.Print doc.FullName
       Debug.Print doc.Name
   Next
 End Sub

 Wordが起動してない場合は、GetObjectが実行時エラーになるので、うまいことやってください。
(´・ω・`) 2023/01/28(土) 01:20:43

 >CreateObject("Word.Application") しちゃったら、そのWordアプリケーションは
 >すでに起動しているWordとは別人です Wordを二重起動している状態です

 なるほど。そういうことでしたか。
 参照設定して実行したところ、起動中のファイル名を取得できました。
 複数のPCで使用するため参照設定はしないやり方でやっていたのですが、最初から無理な話だったみたいですね。

 (´・ω・`)さんありがとうございました。
(フォーキー) 2023/01/28(土) 07:21:29

 参照設定は必ずしもしなくていいです
 単にインテリセンス効かせるためにやっただけなので
 参照設定を外して、変数宣言を ObjectにすればOKのハズ

 CreateObjectじゃなくてGetObjectを使えばいいだけです
(´・ω・`) 2023/01/28(土) 07:26:01

 すみません、勘違いでした。
 変数の型を以下にしたら参照設定なしでも実行できました。
 >Dim wdApp As Object
 >Dim doc

 あらためて、ありがとうございました
(フォーキー) 2023/01/28(土) 07:29:40

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.