Copiar un rango de páginas en una macro (Microsoft Word)
Kevin se pregunta si hay una forma, en VBA, de copiar un rango de páginas. Sabe cómo copiar párrafos y un rango contiguo de texto, pero no sabe cómo copiar páginas enteras.
No hay ningún objeto VBA que haga referencia a una página completa, como ocurre con un párrafo, ni existe una declaración VBA que le permita seleccionar una página. Sin embargo, puede calcular lo que comprendería una página y luego seleccionar ese rango. El concepto general se muestra en esta 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
Esta macro establece el rango de rCopy igual al punto donde comienza la página 7.
Luego selecciona el texto al principio de la página 9 y usa uno de los marcadores integrados de Word para seleccionar desde la parte superior de la página 7 hasta el final de la página 9. (Para eso está diseñada esta macro: seleccionar las páginas 7 al 9.)
Sin embargo, debe tener en cuenta que las páginas son muy fluidas en Word. Si usa exactamente el mismo documento en dos sistemas diferentes, la macro anterior muy bien puede devolver selecciones diferentes por completo. ¿Por qué? Porque las páginas pueden fluir de manera diferente en cada uno de los sistemas.
Si realmente desea copiar las páginas seleccionadas (7 a 9), puede modificar la macro solo un poco para obtener el resultado deseado.
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
Tenga en cuenta que la macro «recuerda» lo que el usuario había seleccionado antes de que se ejecutara, almacenando el rango en la variable rCurrent y usándolo para volver a seleccionar esa área al final de la macro. Las páginas seleccionadas (nuevamente, de la 7 a la 9) se copian en un documento nuevo.
Debe tener en cuenta que las macros anteriores solo funcionan correctamente si en realidad hay al menos 9 páginas en el documento actual. Si desea una macro más flexible y sólida, puede considerar la siguiente variación.
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
Esta versión le pide al usuario que especifique un rango de páginas a copiar. Los números de página se ajustan para asegurarse de que el número inicial sea menor o igual al número final, y se garantiza que tanto el número inicial como el final sean menores que el número total de páginas del documento.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios WordTips), he preparado una página especial que incluye información útil.
link: / wordribbon-WordTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
WordTips es su fuente de formación rentable en Microsoft Word.
(Microsoft Word es el software de procesamiento de texto más popular del mundo). Este consejo (5295) se aplica a Microsoft Word 2007, 2010, 2013, 2016, 2019 y Word en Office 365.