Copiare un intervallo di pagine in una macro (Microsoft Word)
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.