Cuál es la ventaja de definir RANGOS en VBA como objetos? Dim rng as range

Estaba revisando este sitio: http://www.excel-easy.com/vba/range-object.html 

Y en otro macros que he visto, veo que hay diferentes métodos para definir rangos y otorgarles un valor, propiedad, lo que sea.

EJEMPLO:

Range("A1").value = 1
Dim rng as Range
Set rng = Range("A1")
rng.value = 1

A veces noto que los programadores más expertos van por la segunda opción, especialmente si es un código de varias líneas.

¿Será por qué el segundo es más "reusable"?

1 respuesta

Respuesta
1

H o l a:

Una de las ventajas de utilizar las variables como objetos es para simplificar el código.

También, cuando utilizas varias veces el mismo rango, es más práctico escribir una variable que repetir nuevamente el rango, por ejemplo:

Sin establecer un rango en una variable:

Sub macro1()
    Range("A2:C3").ClearContents
    Range("A2:C3").Interior.ColorIndex = 3
    Range("A2:C3").Value = "datos"
End Sub

Para simplificar el código, estableciendo el rango en una variable:

Sub macro2()
    Set r = Range("A2:C3")
    r.ClearContents
    r.Interior.ColorIndex = 3
    r.Value = "datos"
End Sub

Imagina que tienes un código enorme, con diferentes rangos y hojas, entonces el rango que te interesa lo estableces en una variable como objeto, entonces ya no es necesario investigar cuál es tu rango, solamente haces referencia a la variable.


Otra forma de simplificar es la siguiente. Pero en esta forma no estás declarando una variable como objeto, simplemente le estás indicando que vas a hacer con el rango.

Sub macro3()
    With Range("A2:C3")
        .ClearContents
        .Interior.ColorIndex = 3
        .Value = "datos"
    End With
End Sub

Otro ejemplo, sin variables:

Sub macro4()
    Sheets("estado de cuenta de diciembre").Select
    Range("C2:E2").Copy
    Sheets("saldo final").Select
    Range("C12").Select
    ActiveSheet.Paste
    Sheets("estado de cuenta de diciembre").Select
    Range("C3:E3").Copy
    Sheets("saldo final").Select
    Range("C13").Select
    ActiveSheet.Paste
End Sub

con variables:

Sub macro5()
    Set h1 = Sheets("estado de cuenta de diciembre")
    Set r1 = h1.Range("C2:E2")
    Set r11 = h1.Range("C3:E3")
    Set h2 = Sheets("saldo final")
    Set r2 = h2.Range("C12")
    Set r21 = h2.Range("C13")
    r1.Copy r2
    r11.Copy r21
End Sub

En la macro5, solamente se hacer referencia una vez al nombre de la hoja.



':)
':)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas