「excelマクロ wordで文字囲う指定」
といった検索キーワードでアクセスがありました。
Excelマクロで、Wordの文字を囲うにはどのようなコード書けばいいのかを調べていた方による検索です。
Wordの囲い文字を設定するサンプルプロシージャ
本文に何らかの文字列の入力されているWord文書を1つ開いた状態で、以下のExcelマクロを実行してください(Wordへの参照設定は不要です)。
Sub Word文書で囲い文字を設定する()
On Error GoTo ErrHandl
Const wdEncloseStyleLarge = 2
Const wdEnclosureCircle = 0
With GetObject(Class:="Word.Application")
.ActiveDocument.Range(0, 1).ModifyEnclosure _
Style:=wdEncloseStyleLarge, _
Symbol:=wdEnclosureCircle
End With
ErrHandl:
Select Case Err.Number
Case 429
MsgBox "Wordが起動していないようです。"
Case 4248
MsgBox "Word文書が開かれていないようです。"
Case Else
MsgBox Err.Description & vbCrLf & Err.Number
End Select
Err.Clear
End Sub
Word文書の1文字目に囲い文字が設定されます。
サンプルプロシージャで行っている処理内容
Word VBAであれば、以下のコードでアクティブ文書の1文字目に囲い文字を設定できます。
ActiveDocument.Range(0, 1).ModifyEnclosure _ Style:=wdEncloseStyleLarge, _ Symbol:=wdEnclosureCircle
RangeオブジェクトのModifyEcclosureメソッドを使えば囲い文字を設定できます。
Excel VBAから設定したいということですから、まずVBAのGetObject関数を使って、Word.Applicationオブジェクトへの参照を取得しています。
With GetObject(Class:="Word.Application")
純粋なWord VBAであれば、いきなり「ActiveDocument.」と書き始められますが、Excel VBAからの操作ですから、Word.ApplicationオブジェクトのActiveDocumentプロパティを使うわけですからActiveDocumentの直前の「.」が必須です。
With GetObject(Class:="Word.Application") .ActiveDocument.Range(0, 1).ModifyEnclosure _
このあとの、どのように囲うのかを指定する部分で、Word VBAであればいきなり定数を指定できますが、参照設定していないExcel VBAの場合いきなりWordライブリの定数「wdEncloseStyleLarge」「wdEnclosureCircle」が出てきても
コンパイルエラーになってしまいます。
そのため事前にこれらの定数を定義しています。
Const wdEncloseStyleLarge = 2 Const wdEnclosureCircle = 0
ModifyEnclosureメソッドはWordで文字列範囲を表すRangeオブジェクトにのみ用意されているメソッドです。
上記のサンプルではDocument.Rangeメソッドを使って1文字目を表すRangeを取得しています。
Rangeオブジェクトの取得については、拙著『Excel VBAユーザーのためのWord VBA入門(1)』もご参照ください。
Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » Excel VBAでWordの囲い文字を設定する