Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » ダブルクリックでWordのブックマークを選択するExcelのイベントプロシージャ

ダブルクリックでWordのブックマークを選択するExcelのイベントプロシージャ

対象:Excel2007, Excel2010, Excel2013

Wordファイルで設定されたブックマークの一覧をExcelに作成する、ExcelマクロWordマクロをご紹介しました。

Excelファイルにブックマーク名一覧が存在していると、そのブックマーク名一覧から、Word上のブックマークを簡単に選択したいという要望が出てくるものです。

そんなイベントプロシージャを作ってみました。

[スポンサードリンク]

ダブルクリックするとWordのブックマークを選択するサンプルプロシージャ

ブックマーク名の入力されているセルをダブルクリックすると、Wordファイル上のブックマークが選択されるイベントプロシージャです。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
' 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

 MsgBox msg
 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のブックマークを選択するExcelのイベントプロシージャ

さまざまな実行時エラーが発生する可能性がありますが、差し当たり、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

関連語句
VBA, Visual Basic for Applications

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » ダブルクリックでWordのブックマークを選択するExcelのイベントプロシージャ

「Office連携」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.