bugfix> vba > 投稿

テンプレートにテーブルを設定するWordのカスタムボタンをいくつか設定しました。次に、2番目のテーブルのセルを反復処理するために使用するものの例を示します。

ActiveDocument.Tables(2).Cell(i, j).Range

最初は、各テンプレートに常に1つのページがあったため、これはうまくいきました。これはもはや事実ではありません。現在、このプログラムは、現在表示されているページに応じて機能する必要があります。それほど望ましくないのは、ユーザーに目的のページをクリックして、次のようなコードを使用するように切り替えることです。

ActiveDocument.Bookmarks("\page").Range.Tables(2).Select

Wordは、ステータスバーの左側に現在表示されているページのページ番号を表示します。例:「ページ3/7」。したがって、ユーザーがページ3を表示しているときにカスタムボタンをクリックすると、現在の挿入ポイントではなく、ページ3のテーブルにプログラムが読み込まれます。

VBAで現在表示されているページのオブジェクト(テーブルなど)を参照する方法はありますか?

一部のコーダー これは達成できないことをかなり頑固に思えますが、挿入ポイント方式を使用する前に皆さんに確認したかったのです。

最後に:ページごとに一定の量のテーブルはなく、各テーブルの内容/レイアウトは異なる場合があり、テーブルはページの境界を越えません。

ありがとう。

回答 1 件
  • Sub test()
    Dim r As Range
    Dim t As Table
    Set r = ActiveWindow.RangeFromPoint(740, 250)
    Dim p As Long
    p = r.Information(wdActiveEndPageNumber)
    For Each t In ActiveDocument.Tables
        If t.Cell(1, 1).Range.Information(wdActiveEndPageNumber) = p Then
            t.Cell(1, 1).Shading.BackgroundPatternColorIndex = wdBrightGreen
            Exit For
        End If
    Next t
    End Sub
    
    

    これにより、カーソルの位置に関係なく、画面に表示される最初のテーブルの最初のセルに色が付けられます。画面の解像度に合わせてrangefrompointのX、Y座標を調整する必要がある場合があります

あなたの答え