[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.