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関連

    Acrobat XIを操作してテキスト認識操作を行うVBAマクロ

    マクロからAcrobatを操作する場合「PDFファイル上のフィールドの…

  2. Office関連

    Visual Studio Community 2015でOffice開発する。

    「Microsoft、統合開発環境「Visual Studio 201…

  3. Word

    GoogleとYahoo!で同時に翻訳するWordマクロ

    「Google翻訳で文字列を翻訳するマクロ」と「Yahoo!翻訳で文字…

  4. アイコン一覧

    Office 2013 アイコン一覧(R)

    ・Office 2013 アイコン一覧 NUM…

  5. Office関連

    IEサポート終了でVBAマクロはどうなるの?

    ※下記情報は2021年5月時点の情報で、今後状況が変わっていく可能性が…

  6. Office関連

    Office 2007のサポートが2017年10月10日に終了します。

    2007年1月にパッケージ版が発売されてから早10年、長らく活躍してき…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP