「ワード マクロ 表の中の表を判定」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
表の中に表があるかどうかを判定する、Wordマクロ・Word VBA(Visual Basic for Applications)のコードを探している方による検索です。
アクティブな表の中に表があるかを判定するサンプルマクロ
以下のマクロで、アクティブな表の中に表が存在しているかどうかを判定することができます。
Dim msg As String
If Selection.Tables(1).Tables.Count >= 1 Then
msg = "アクティブな表の中に表が存在しています。"
Else
msg = "アクティブな表の中に表はありません。"
End If
MsgBox msg
End SubTableオブジェクトの、Tablesプロパティを使えば、表の中に表が存在しているかを調べられます。
TableオブジェクトのTablesプロパティは、Tableオブジェクトの中にある、Tablesコレクションオブジェクトを返すプロパティだからです。
Tableオブジェクトの中のTablesコレクションオブジェクトの数が「0」であれば、Tableオブジェクトの中にTablesコレクションオブジェクトは存在していないわけですから、表の中に表は存在していないことになります。
Tableオブジェクトの中のTablesコレクションオブジェクトの数が「1」以上であれば、Tableオブジェクトの中にTablesコレクションオブジェクトが存在しているわけですから、表の中に表が存在していることになります。
この考え方を利用して、アクティブな表の中の、TablesコレクションオブジェクトのCountプロパティが「1」以上だったときに、
If Selection.Tables(1).Tables.Count >= 1 Then
アクティブな表の中に表があるという文字列を作成して、
msg = "アクティブな表の中に表が存在しています。"
アクティブな表の中の、TablesコレクションオブジェクトのCountプロパティが「1」未満だったときには、アクティブな表の中に表はないという文字列を作成して、
Else
msg = "アクティブな表の中に表はありません。"
MsgBox関数で、作成した文字列を表示しています。
MsgBox msg
アクティブな文書内にある表の中に表があるかを判定するサンプルマクロ
以下のようなマクロにすれば、アクティブ文書内の表の中に表が存在しているかどうかを判定することができます。
Dim tbl As Table
Dim msg As String
msg = ""
For Each tbl In ActiveDocument.Tables
If tbl.Tables.Count >= 1 Then
msg = msg & _
tbl.Range.Information(wdActiveEndPageNumber) & vbCrLf
End If
Next tbl
If msg = "" Then
Debug.Print "アクティブ文書の表の中に表はありません。"
Else
Debug.Print "以下のページの表の中に表があります。" _
& vbCrLf & msg
End If
上記のマクロを実行したときに、表の中に表が存在していると、イミディエイトウィンドウに以下のような出力が行われます。
アクティブな文書内の、すべての表に対してループを回して、
For Each tbl In ActiveDocument.Tables
その表の中のTablesコレクションオブジェクトの数を調べて「1」以上だったときには、
If tbl.Tables.Count >= 1 Then
ページ番号を変数・msgに格納しておきます。
msg = msg & _
tbl.Range.Information(wdActiveEndPageNumber) & vbCrLf
すべての表に対するループが終わったあとに、変数・msgに応じた内容をイミディエイトウィンドウに出力しています。
If msg = "" Then
Debug.Print "アクティブ文書の表の中に表はありません。"
Else
Debug.Print "以下のページの表の中に表があります。" _
& vbCrLf & msg
End If
最終更新日時:2021-09-03 17:51
Home » ワードマクロ・Word VBAの使い方 » 表・テーブル » 表の中に表があるか調べるWordマクロ