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

テキストボックスの中にある表を操作するWordマクロ前のページ

Microsoft EdgeのURL制限は2083文字なのか調べてみた。次のページ

関連記事

  1. Office関連

    ドラッグ&ドロップしたOfficeファイルをPDFに変換するVBScript

    複数のExcelファイルをPDFに一括変換する必要があったので、簡単な…

  2. アイコン一覧

    Office 2013 アイコン一覧(X,Y,Z)

    ・Office 2013 アイコン一覧 NUM…

  3. Office アドイン

    [Office用アプリ]選択範囲変更時のイベントを利用する。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  4. Office関連

    コントロールID 一覧(Office 2013)

    2013/03/25 追記:Office 2013のコントロールI…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP