「accessvba wordファイル 既に開いている」
という検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスがありました。
Access VBAで、既に開いているWord文書を取得するにはどうすればいいのか、調べていらしたのでしょう。
開いているアクティブなWord文書からデータを取得するSubプロシージャを既にご紹介しているので、この記事では開いているWord文書(Word.Documentオブジェクト)を順番に取得するサンプルをご紹介します。
For Each~NextでDocumentを順番に取得するサンプルプロシージャ
以下のSubプロシージャを実行すると、開いているWord.Documentが順番に取得され、その文書名(Word.Document.Name)がメッセージボックスに表示されます。
On Error GoTo ErrHandl
Dim wd_app As Object
Set wd_app = GetObject(Class:="Word.Application")
Dim wd_doc As Object
For Each wd_doc In wd_app.Documents
MsgBox wd_doc.Name
Next
Set wd_doc = Nothing
Set wd_app = Nothing
Exit Sub
ErrHandl:
Select Case Err.Number
Case 429
MsgBox "Wordが起動していないようです。"
Case Else
MsgBox Err.Description & vbCrLf & Err.Number
End Select
Err.Clear
End Sub
サンプルプロシージャで行っている処理の内容
VBAのGetObject関数の引数Classに文字列「Word.Application」を指定して、起動済みのWord.Applicationへの参照を取得した後は、
Dim wd_app As Object Set wd_app = GetObject(Class:="Word.Application")
実質的にWord VBAです。
拙著『Excel VBAユーザーのためのWord VBA入門(1)』の[2.5. DocumentsはDocumentのコレクション]で、開いている全文書を表すWordのDocumentsコレクションをご紹介しています。
Word.DocumentsコレクションからFor Each~Nextループを使って、要素であるWord.Documentオブジェクトを順番に取得して、拙著の[2-1. ActiveDocumentでアクティブ文書を取得する]でも紹介しているWord.Document.Nameプロパティで文書名を取得しメッセージボックスに表示しています。
Dim wd_doc As Object For Each wd_doc In wd_app.Documents MsgBox wd_doc.Name
For~Nextで処理したい場合
VBAのFor Each~Nextループは、基本的にFor~Nextループで書くことも可能です。
また、オブジェクト変数を使った処理は、With文を使って書けるケースも少なくありません。
先ほどの
Dim wd_app As Object Set wd_app = GetObject(Class:="Word.Application") Dim wd_doc As Object For Each wd_doc In wd_app.Documents MsgBox wd_doc.Name Next Set wd_doc = Nothing Set wd_app = Nothing
は、以下のように、Withブロック内でFor~Next文を使っても同様の結果となります。
With GetObject(Class:="Word.Application") Dim i As Long With .Documents For i = 1 To .Count MsgBox .Item(i).Name Next End With End With
最終更新日時:2024-03-29 11:34
- Newer:Word VBAでグラフを選択する
- Older:取り消し線をExcel VBAで判定するには注意が必要
Home » Access VBA » Access VBAで既に開いているWord文書を順番に取得する