マクロ内のページ範囲のコピー(Microsoft Word)
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に適用されます。