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.