【VBA】カーソルをワードファイルの指定ページ冒頭/末尾まで移動させる | あじゅWeb

【VBA】カーソルをワードファイルの指定ページ冒頭/末尾まで移動させる

エクセルVBAでよく使うコードの備忘録。VBAでワードファイルを操作し、カーソルを指定ページ冒頭に移動させるコード。

スポンサーリンク

事前準備

VBAでワードファイルを操作するには、参照設定が必要です。VBAのコードエディタから「ツール > 参照設定」と進み、「Microsoft Word XX.X Object Library」にチェックを入れておきます。

共通コード

説明するコードを簡素化するために使用した変数などの共通部分です。今回のテーマの本質的な部分には関係はありません。コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。

'--- Wordのアプリケーションオブジェクト ---'
Dim objWord As Word.Application
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
    
'--- ドキュメントオブジェクト ---'
Dim objDoc As Word.Document
Set objDoc = objWord.Documents.Open("[ワードファイルのパス]")
    
'--- 移動先のページ番号 ---'
Dim pageNo As Long
pageNo = [ページ番号]

指定ページ冒頭までカーソルを移動

カーソルを指定ページまで移動させるには、「Selection」オブジェクトの「GoTo」を使います。

Call objWord.Selection.Goto(What:=wdGoToPage, Which:=wdGoToFirst, Count:=pageNo)

指定ページ末尾までカーソルを移動

カーソルを指定ページ末尾まで移動させるには、「GoTo」メソッドの「Which」引数を「wdGoToLast」にすればよい。ように思いますが、試してみると指定ページが文書の最終ページでない限り、次のページの冒頭が指定されてしまいます。そこで、ページ末尾までカーソルを移動させる場合、「次のページの冒頭まで移動して一つ戻る」という風にします。

'--- ワードファイルのトータルページ数 ---'
Dim totPageN As Long
totPageN = objDoc.Content.Information(wdNumberOfPagesInDocument)
  
'--- 指定ページの最終位置を格納する変数 ---'
Dim posEnd As Long
    
'指定ページ数がトータルページ数以下の時だけ処理を行う
If (pageNo <= totPageN) Then
       
    '指定ページが最終ページの時
    If (pageNo = totPageN) Then
        Call objWord.Selection.EndKey(Unit:=wdStory)
        posEnd = objWord.Selection.End
            
    'それ以外の時
    Else
        Call objWord.Selection.Goto(What:=wdGoToPage, which:=wdGoToFirst, Count:=pageNo + 1)
        posEnd = objWord.Selection.Start - 1
    End If
    
End If
    
'--- 指定した位置にカーソルを移動する ---'
objWord.Selection.Start = posEnd
objWord.Selection.End = posEnd

サンプルコード

指定ページ冒頭までカーソルを移動するコード

Public Sub MoveToTopOfPage()
    
    '--- Wordのアプリケーションオブジェクト ---'
    Dim objWord As Word.Application
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True
    
    '--- ドキュメントオブジェクト ---'
    Dim objDoc As Word.Document
    Set objDoc = objWord.Documents.Open("[ワードファイルのパス]")
    
    '--- 移動先のページ番号 ---'
    Dim pageNo As Long
    pageNo = [ページ番号]
    
    '--- 指定ページ冒頭にカーソルを移動 ---'
    Call objWord.Selection.Goto(What:=wdGoToPage, Which:=wdGoToFirst, Count:=pageNo)

End Sub

指定ページ末尾までカーソルを移動するコード

Public Sub MoveToLastOfPage()
    
    '--- Wordのアプリケーションオブジェクト ---'
    Dim objWord As Word.Application
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True
    
    '--- ドキュメントオブジェクト ---'
    Dim objDoc As Word.Document
    Set objDoc = objWord.Documents.Open("[ワードファイルのパス]")
    
    '--- 移動先のページ番号 ---'
    Dim pageNo As Long
    pageNo = [ページ番号]
    
    '--- ワードファイルのトータルページ数 ---'
    Dim totPageN As Long
    totPageN = objDoc.Content.Information(wdNumberOfPagesInDocument)
    
    '--- 指定ページの最終位置を格納する変数 ---'
    Dim posEnd As Long
    
    '指定ページ数がトータルページ数以下の時だけ処理を行う
    If (pageNo <= totPageN) Then
        
        '指定ページが最終ページの時
        If (pageNo = totPageN) Then
            Call objWord.Selection.EndKey(Unit:=wdStory)
            posEnd = objWord.Selection.End
            
        'それ以外の時
        Else
            Call objWord.Selection.Goto(What:=wdGoToPage, which:=wdGoToFirst, Count:=pageNo + 1)
            posEnd = objWord.Selection.Start - 1
        End If
    
    End If
    
    '--- 指定した位置にカーソルを移動する ---'
    objWord.Selection.Start = posEnd
    objWord.Selection.End = posEnd

End Sub