Kevinは、VBAで、ある範囲のページをコピーする方法があるかどうか疑問に思います。彼は段落と連続した範囲のテキストをコピーする方法を知っていますが、ページ全体をコピーする方法を知りません。

段落があるなど、ページ全体を参照するVBAオブジェクトはなく、ページを選択できるVBAステートメントもありません。ただし、ページを構成するものを計算して、その範囲を選択することはできます。一般的な概念は次のマクロに示されています:

Sub CopyPages1()

Dim rCopy As Range

Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _       Which:=wdGoToAbsolute, Count:=7)

Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=9

rCopy.End = Selection.Bookmarks("\Page").Range.End

rCopy.Select End Sub

このマクロは、rCopy範囲を7ページの開始点に等しく設定します。

次に、9ページの最初のテキストを選択し、Wordの組み込みブックマークの1つを使用して、7ページの上部から9ページの最後までを選択します(これが、このマクロの目的です。7ページを選択してください) 9まで)

ただし、Wordではページが非常に流動的であることに注意してください。 2つの異なるシステムでまったく同じドキュメントを使用する場合、上記のマクロは完全に異なる選択を返す可能性があります。どうして?ページはシステムごとに異なるフローになる可能性があるためです。

選択したページ(7〜9)を実際にコピーする場合は、マクロを少し変更して、目的の結果を得ることができます。

Sub CopyPages2()

Dim rCopy As Range     Dim rCurrent As Range

Set rCurrent = Selection.Range

Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _       Which:=wdGoToAbsolute, Count:=7)

Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=9

rCopy.End = Selection.Bookmarks("\Page").Range.End     rCopy.Copy     Documents.Add     ActiveDocument.Range.PasteSpecial

rCurrent.Select End Sub

マクロは、実行前にユーザーが選択したものを「記憶」し、範囲をrCurrent変数に格納し、それを使用してマクロの最後でその領域を再度選択することに注意してください。選択したページ(ここでも7から9)が新しいドキュメントにコピーされます。

上記のマクロは、現在のドキュメントに実際に少なくとも9ページある場合にのみ正しく機能することに注意してください。より柔軟で堅牢なマクロが必要な場合は、次のバリエーションを検討してください。

Sub CopyPages3()

Dim rCopy As Range     Dim rCurrent As Range     Dim sTemp As String     Dim i As Integer     Dim iStart As Integer     Dim iEnd As Integer          Set rCurrent = Selection.Range

' Get page numbers to be copied     sTemp = InputBox("Page range to copy (use format 6-7)", "")

i = InStr(sTemp, "-")

If i > 0 Then         iStart = Val(Left(sTemp, i - 1))

iEnd = Val(Mid(sTemp, i + 1))

If iStart < 1 Then iStart = 1         If iEnd < iStart Then iEnd = iStart         With ActiveDocument.Range             If iStart > .Information(wdNumberOfPagesInDocument) Then                 iStart = .Information(wdNumberOfPagesInDocument)

End If             If iEnd > .Information(wdNumberOfPagesInDocument) Then                 iEnd = .Information(wdNumberOfPagesInDocument)

End If         End With

' Set the range         Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _           Which:=wdGoToAbsolute, Count:=iStart)

Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, _           Count:=iEnd         rCopy.End = Selection.Bookmarks("\Page").Range.End                  ' Copy range to a new document         rCopy.Copy         Documents.Add         ActiveDocument.Range.PasteSpecial

rCurrent.Select     Else         If sTemp > "" Then             MsgBox "There is no dash character"

End If     End If End Sub

このバージョンでは、コピーするページ範囲を指定するようにユーザーに求めています。ページ番号は、開始番号が終了番号以下になるように調整され、開始番号と終了番号の両方がドキュメントの合計ページ数よりも少なくなるようになっています。

注:

このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。

(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(5295)は、Microsoft Word 2007、2010、2013、2016、2019、およびOffice365のWordに適用されます。