Kevin si chiede se esiste un modo, in VBA, per copiare un intervallo di pagine. Sa come copiare paragrafi e un intervallo di testo contiguo, ma non sa come copiare intere pagine.

Non esiste un oggetto VBA che fa riferimento a un’intera pagina, ad esempio con un paragrafo, né un’istruzione VBA che ti consentirà di selezionare una pagina. È tuttavia possibile calcolare cosa comporterebbe una pagina e quindi selezionare quell’intervallo. Il concetto generale è mostrato in questa macro:

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

Questa macro imposta l’intervallo rCopy uguale al punto in cui inizia la pagina 7.

Quindi seleziona il testo all’inizio della pagina 9 e utilizza uno dei segnalibri incorporati di Word per selezionare dalla parte superiore della pagina 7 alla fine della pagina 9. (Questo è ciò che questa macro è progettata per fare: seleziona le pagine 7 fino a 9.)

Si noti, tuttavia, che le pagine sono molto fluide in Word. Se si utilizza lo stesso identico documento su due sistemi diversi, la macro sopra potrebbe benissimo restituire selezioni completamente diverse. Perché? Perché le pagine possono scorrere in modo diverso su ciascuno dei sistemi.

Se si desidera effettivamente copiare le pagine selezionate (da 7 a 9), è possibile modificare leggermente la macro per ottenere il risultato desiderato.

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

Si noti che la macro “ricorda” ciò che l’utente aveva selezionato prima di essere eseguita, memorizzando l’intervallo nella variabile rCurrent e utilizzandolo per selezionare nuovamente quell’area alla fine della macro. Le pagine selezionate (ancora, da 7 a 9) vengono copiate in un documento nuovo di zecca.

Si noti che le macro precedenti funzionano correttamente solo se in realtà ci sono almeno 9 pagine nel documento corrente. Se desideri una macro più flessibile e robusta, potresti prendere in considerazione la seguente variazione.

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

Questa versione chiede all’utente di specificare un intervallo di pagine da copiare. I numeri di pagina vengono regolati per assicurarsi che il numero iniziale sia minore o uguale al numero finale e che sia il numero iniziale che quello finale siano inferiori al numero totale di pagine del documento.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti WordTips), ho preparato una pagina speciale che include informazioni utili.

WordTips è la tua fonte di formazione economica su Microsoft Word.

(Microsoft Word è il software di elaborazione testi più popolare al mondo.) Questo suggerimento (5295) si applica a Microsoft Word 2007, 2010, 2013, 2016, 2019 e Word in Office 365.