エクセル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