Wordファイルで設定されたブックマークの一覧をExcelに作成する、ExcelマクロとWordマクロをご紹介しました。
Excelファイルにブックマーク名一覧が存在していると、そのブックマーク名一覧から、Word上のブックマークを簡単に選択したいという要望が出てくるものです。
そんなイベントプロシージャを作ってみました。
ダブルクリックするとWordのブックマークを選択するサンプルプロシージャ
ブックマーク名の入力されているセルをダブルクリックすると、Wordファイル上のブックマークが選択されるイベントプロシージャです。
' A列のブックマーク名をダブルクリックすると
' Wordのブックマークを選択する
Const TOP_CEL = "A3" 'ブックマーク名の入力された一番上のセル
Dim rng As Range
Set rng = Range(TOP_CEL, Range(TOP_CEL).End(xlDown))
If Intersect(Target, rng) Is Nothing Then Exit Sub
Cancel = True 'ダブルクリックを無効に
On Error GoTo ERR_HNDL
With GetObject(Class:="Word.Application")
.Documents(1).Bookmarks(Target.Value).Select
.Activate
End With
On Error GoTo 0
Exit Sub
ERR_HNDL:
Dim err_num As Long
err_num = Err.Number
Dim msg As String
Select Case err_num
Case 429
msg = "Wordファイルが開かれていません。"
Case 5941
msg = "ブックマークが見つかりません。"
Case Else
msg = "エラーが発生しました。 " & err_num
End Select
Err.Clear
End Sub
サンプルプロシージャの解説
先日ご紹介したマクロを利用してブックマーク名一覧が作成され、A3セル以下にブックマーク名が並んでいるという前提で、
Const TOP_CEL = "A3"
ブックマーク名以外のセルがダブルクリックしたときは、プロシージャを抜けています。
Dim rng As Range
Set rng = Range(TOP_CEL, Range(TOP_CEL).End(xlDown))
If Intersect(Target, rng) Is Nothing Then Exit Sub
ここでは先にご紹介したマクロを使ってブックマーク名一覧を作成している前提ですから、一番下のセルを取得するのにRange.Endプロパティに定数・xlDownを指定する方法を使っています。
ブックマーク名の入力されているセルがダブルクリックされたときに、セル内にカーソルが入らないように、Worksheet_BeforeDoubleClickイベントプロシージャの引数・CancelをTrueにしてから、
Cancel = True
Wordの、
With GetObject(Class:="Word.Application")
開かれている一つ目のファイルで、ダブルクリックされたセルに入力されているのと同じ名前のブックマークを選択して、
.Documents(1).Bookmarks(Target.Value).Select
Wordをアクティブにしています。
.Activate
主たる処理はこれだけです。
WordのBookmarkオブジェクトのSelectメソッドを実行するだけです。
さまざまな実行時エラーが発生する可能性がありますが、差し当たり、Wordファイルが開かれていない場合と、ブックマークが見つからない場合に、その旨のメッセージを表示するようにして、
err_num = Err.Number
Select Case err_num
Case 429
msg = "Wordファイルが開かれていません。"
Case 5941
msg = "ブックマークが見つかりません。"
その他のエラーの場合には、Err.Numberとともに簡単なメッセージを表示するようにしています。
Case Else
msg = "エラーが発生しました。 " & err_num
End Select
MsgBox msg
Err.Clear
Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » ダブルクリックでWordのブックマークを選択するExcelのイベントプロシージャ