Trabajar con objetos Range
Es habitual especificar un área de un documento y luego hacer algo con ella, como insertar texto o aplicar formato cuando se usa Visual Basic. Por ejemplo, podría crear una macro que buscara una palabra o frase en una parte de un documento. La parte del documento se puede representar mediante un objeto Range . Después de identificar el objeto Range, se pueden aplicar los métodos y propiedades del objeto Range para modificar el contenido del rango.
Un objeto Range hace referencia a una zona contigua del documento. Cada objeto Range se define mediante una posición de carácter inicial y final. De forma similar al uso de los marcadores en un documento, los objetos Range se utilizan en los procedimientos de Visual Basic para identificar partes específicas del documento. Un objeto Range puede ser tan pequeño como el punto de inserción o tan grande como todo el documento. Sin embargo, a diferencia de los marcadores, un objeto Range sólo existe mientras se ejecuta el procedimiento que lo define.
Las propiedades Start, End y StoryType identifican de forma única un objeto Range . Las propiedades Start y End obtienen o establecen las posiciones de caracteres iniciales y finales del objeto Range. La posición de caracteres al principio del documento es cero, la posición después del primer carácter es uno y así sucesivamente. Hay varios tipos de historia representados por las constantes WdStoryType de la propiedad StoryType .
Nota:
Los objetos Range son independientes de la selección. Es decir, puede definir y modificar un intervalo sin cambiar la selección actual. Por otro lado, en un documento pueden definirse varios intervalos, pero sólo puede haber una selección por panel de documento.
Uso del método Range
Use el método Range del objeto Document para crear un objeto Range que se encuentre en el artículo principal y que tenga un punto de conexión y un inicio determinados. El siguiente ejemplo crea un objeto Range que empieza al principio del primer carácter y se extiende hasta el décimo carácter.
Sub SetNewRange()
Dim rngDoc As Range
Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
End Sub
Puede ver si se ha creado el objeto Range al aplicar una propiedad o un método a dicho objeto Range. En el siguiente ejemplo, se aplica formato de negrita a los 10 primeros caracteres del documento activo.
Sub SetBoldRange()
Dim rngDoc As Range
Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
rngDoc.Bold = True
End Sub
Cuando necesite hacer referencia a un objeto Range varias veces, puede utilizar la instrucción Set para definir una variable igual al objeto Range. Sin embargo, si solo necesita realizar una sola acción en un objeto Range , no es necesario almacenar el objeto en una variable. Se puede lograr el mismo resultado utilizando solamente una sola instrucción que identifique el rango y cambie la propiedad Bold.
Sub BoldRange()
ActiveDocument.Range(Start:=0, End:=10).Bold = True
End Sub
Al igual que los marcadores, un intervalo puede ocupar un grupo de caracteres o marcar una posición en un documento. El objeto Range del siguiente ejemplo tiene un mismo punto inicial y final. En el intervalo no se incluye texto. En el siguiente ejemplo, se inserta texto al principio del documento activo.
Sub InsertTextBeforeRange()
Dim rngDoc As Range
Set rngDoc = ActiveDocument.Range(Start:=0, End:=0)
rngDoc.InsertBefore "Hello "
End Sub
Puede definir el principio y los puntos de conexión de un intervalo mediante los números de posición de caracteres, como se muestra anteriormente, o bien usar las propiedades Start y End con objetos como Selection, Bookmark o Range . En el siguiente ejemplo, se crea un objeto Range que comienza al principio del segundo párrafo y acaba después del tercer párrafo.
Sub NewRange()
Dim doc As Document
Dim rngDoc As Range
Set doc = ActiveDocument
Set rngDoc = doc.Range(Start:=doc.Paragraphs(2).Range.Start, _
End:=doc.Paragraphs(3).Range.End)
End Sub
Para obtener información adicional y ejemplos, vea el método Range .
Uso de la propiedad Range
La propiedad Range aparece en varios objetos(como Paragraph, Bookmark y Cell) y se usa para devolver un objeto Range . En el siguiente ejemplo, se devuelve un objeto Range que hace referencia al primer párrafo del documento activo
Sub SetParagraphRange()
Dim rngParagraph As Range
Set rngParagraph = ActiveDocument.Paragraphs(1).Range
End Sub
Una vez creado un objeto Range, puede utilizar cualquiera de las propiedades o los métodos del objeto Range para modificarlo. En el siguiente ejemplo, se selecciona el segundo párrafo del documento activo y, a continuación, se centra la selección.
Sub FormatRange()
ActiveDocument.Paragraphs(2).Range.Select
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
End Sub
Si necesita aplicar muchas propiedades o muchos métodos a un mismo objeto Range, puede utilizar la estructura With...End With. En el siguiente ejemplo, se da formato al texto del primer párrafo del documento activo.
Sub FormatFirstParagraph()
Dim rngParagraph As Range
Set rngParagraph = ActiveDocument.Paragraphs(1).Range
With rngParagraph
.Bold = True
.ParagraphFormat.Alignment = wdAlignParagraphCenter
With .Font
.Name = "Stencil"
.Size = 15
End With
End With
End Sub
Para obtener información adicional y ejemplos, vea el tema de la propiedad Range .
Volver a definir un objeto Range
Use el método SetRange para volver a definir un objeto Range existente. En el siguiente ejemplo se define un rango como selección actual. A continuación, el método SetRange vuelve a definir el rango para que haga referencia a la selección actual y a los 10 caracteres siguientes.
Sub ExpandRange()
Dim rngParagraph As Range
Set rngParagraph = Selection.Range
rngParagraph.SetRange Start:=rngParagraph.Start, _
End:=rngParagraph.End + 10
End Sub
Para obtener más información y ejemplos, vea el método Range del documento.
Nota:
Al depurar las macros, puede usar el método Select para asegurarse de que un objeto Range hace referencia al intervalo de texto correcto. Por ejemplo, la siguiente opción selecciona un objeto Range que hace referencia al segundo y tercer párrafos del documento activo y luego da formato a la fuente de la selección.
Sub SelectRange()
Dim rngParagraph As Range
Set rngParagraph = ActiveDocument.Paragraphs(2).Range
rngParagraph.SetRange Start:=rngParagraph.Start, _
End:=ActiveDocument.Paragraphs(3).Range.End
rngParagraph.Select
Selection.Font.Italic = True
End Sub
Soporte técnico y comentarios
¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.