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

    「Excel VBAでIEを思いのままに操作できるプログラミング術」の見本誌をいただきました。

    「VBAアクションゲーム?Excel(エクセル)で動かそう!」で有名な…

  2. Office関連

    [Mayhem]PowerPointマクロにショートカットキーを割り当てる。

    2012/4/20 追記:クイックアクセスツールバーのメニューを利用す…

  3. Excel

    名前付きセル(範囲)にコメントを付けるVBAマクロ

    Excelでマニュアルを作成する際、名前付きセル範囲を明記する必要があ…

  4. Office関連

    組み込み定数を列挙するVBAマクロ

    定数の名前や値を調べたい、そんなときはTypeLib Informat…

  5. Office関連

    [Word 2013]表形式のデータ入力にはコレが便利!?「コンテンツ繰り返しコントロール」の紹介

    Wordにはユーザー入力フォームを作るのに便利な機能「コンテンツ コン…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP