Kopieren eines Seitenbereichs in ein Makro (Microsoft Word)
Kevin fragt sich, ob es in VBA eine Möglichkeit gibt, eine Reihe von Seiten zu kopieren. Er weiß, wie man Absätze und einen zusammenhängenden Textbereich kopiert, aber er weiß nicht, wie man ganze Seiten kopiert.
Es gibt weder ein VBA-Objekt, das auf eine ganze Seite verweist, z. B. einen Absatz, noch eine VBA-Anweisung, mit der Sie eine Seite auswählen können. Sie können jedoch berechnen, was eine Seite umfassen würde, und dann diesen Bereich auswählen. Das allgemeine Konzept wird in diesem Makro gezeigt:
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
Dieses Makro setzt den rCopy-Bereich auf den Punkt, an dem Seite 7 beginnt.
Anschließend wird der Text ganz am Anfang von Seite 9 ausgewählt und mithilfe eines der in Word integrierten Lesezeichen vom Anfang von Seite 7 bis zum Ende von Seite 9 ausgewählt. (Zu diesem Zweck wurde dieses Makro entwickelt: Wählen Sie Seiten 7 aus bis 9.)
Sie sollten jedoch beachten, dass Seiten in Word sehr flüssig sind. Wenn Sie genau dasselbe Dokument auf zwei verschiedenen Systemen verwenden, gibt das obige Makro möglicherweise ganz unterschiedliche Auswahlen zurück. Warum? Weil die Seiten auf jedem System unterschiedlich fließen können.
Wenn Sie die ausgewählten Seiten (7 bis 9) tatsächlich kopieren möchten, können Sie das Makro nur geringfügig ändern, um das gewünschte Ergebnis zu erzielen.
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
Beachten Sie, dass sich das Makro „merkt“, was der Benutzer vor seiner Ausführung ausgewählt hat, indem es den Bereich in der Variablen rCurrent speichert und damit diesen Bereich am Ende des Makros erneut auswählt. Die ausgewählten Seiten (wieder 7 bis 9) werden in ein brandneues Dokument kopiert.
Sie sollten beachten, dass die oben genannten Makros nur dann ordnungsgemäß funktionieren, wenn das aktuelle Dokument tatsächlich mindestens 9 Seiten enthält. Wenn Sie ein flexibleres und robusteres Makro wünschen, können Sie die folgende Variante in Betracht ziehen.
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
Diese Version fordert den Benutzer auf, einen zu kopierenden Seitenbereich anzugeben. Die Seitenzahlen werden angepasst, um sicherzustellen, dass die Startnummer kleiner oder gleich der Endnummer ist und sowohl die Start- als auch die Endnummer kleiner als die Gesamtzahl der Seiten im Dokument sind.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der WordTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
WordTips ist Ihre Quelle für kostengünstige Microsoft Word-Schulungen.
(Microsoft Word ist die weltweit beliebteste Textverarbeitungssoftware.) Dieser Tipp (5295) gilt für Microsoft Word 2007, 2010, 2013, 2016, 2019 und Word in Office 365.