Office関連

セル内にあるブックマークをカウントするWordマクロ

Twitterを眺めていたら下記ツイートを発見しました。

Wordの表中にあるセルに含まれるブックマークをカウントすると、そのセルと同じ行にある他のブックマークまでカウントされるというのです。

さっそく確かめてみることにしました。

まずは下図のようなテスト用の表を用意します。
表中のセルにはブックマークが設定してあり、分かりやすいように蛍光ペンでマークしています。

WordVBA_CountBookmarks_01

この表に対して下記コードを実行したところ、

Public Sub Test()
  Dim bm As Word.Bookmark
  
  With ActiveDocument.Tables(1).Cell(1, 1).Range
    Debug.Print "Bookmarks:" & .Bookmarks.Count
    For Each bm In .Bookmarks
      Debug.Print bm.Range.Text
    Next
  End With
End Sub

本来であれば下図のようになるはずが、

WordVBA_CountBookmarks_02

下図の結果となりました。

WordVBA_CountBookmarks_03

これを見ると、たしかに指定したセルがある行に含まれるブックマークがすべて取得されてしまっているようです。

やり方を変えて、下図のように特定のセルのみを選択して、Selectionオブジェクトからブックマーク数をカウントしてみましたが、結果は同じでした。

WordVBA_CountBookmarks_04

・・・原因は気になるところですが、Wordでマクロを扱っていると、こうした意図しない結果になることはよくあるので、あまり深追いしないことにします。

そして対応としては、単純にブックマークの開始位置と終了位置が、指定したセル内に含まれているかどうかを調べれば良いかと思います。

Public Sub Test2()
  Debug.Print "Bookmarks:" & _
              CountBookmarks(ActiveDocument.Tables(1).Cell(1, 1))
End Sub

Public Function CountBookmarks(ByVal TargetCell As Word.Cell) As Long
  Dim bm As Word.Bookmark
  Dim cnt As Long
  
  cnt = 0 '初期化
  With TargetCell.Range
    For Each bm In ActiveDocument.Bookmarks
      If bm.Start >= .Start And _
         bm.End <= .End Then
        cnt = cnt + 1
      End If
    Next
  End With
  CountBookmarks = cnt
End Function

これでようやく意図した通りの結果を得ることができました。

WordVBA_CountBookmarks_05

関連記事

  1. Office アドイン

    Office 用アプリの開発資料(日本語)が公開されました。

    Office 用アプリの開発資料(日本語)が公開されました。・…

  2. Office関連

    VBAの力量をはかる3つの質問

    先日、Twitterではけた氏の面白いツイートがありました。3…

  3. Office アドイン

    [Office用アプリ]画像を挿入する。

    DocumentオブジェクトのsetSelectedDataAsync…

  4. Office関連

    Instagram APIをVBAから呼び出してみる。

    最近画像共有系のSNS、Instagram(インスタグラム)を使い始め…

  5. アイコン一覧

    Office 2013 アイコン一覧(O)

    ・Office 2013 アイコン一覧 NUM…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP