Un ejemplo muy común de su uso es el código generado por nuestra vieja amiga la “Grabadora de Macros”:
Un ejemplo de macro grabada en donde colocamos color de relleno a un rango de celdas:
Sub Macro1()
'
' Macro1 Macro
'
'
Range("A1:B6").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("A1").Select
End Sub
Para, sobre todo, quienes se inician en el mundo del VBA, definitivamente la grabadora es una herramienta muy útil y ayuda mucho a aprender el uso métodos y las propiedades de los objetos pero hay que saber que hay mucho código innecesario que termina, no solo alargando nuestra macro, sino que en muchos casos hace más lentos lo procesos. Por ejemplo, lo que nos ha generado la grabadora en el ejemplo anterior, podríamos dejarlos así:
Sub Mi_Macro()
Range("A1:B6").Interior.Color = 65535
End Sub
Como se puede ver, no es necesario el uso de “Select” o de “Selection” para conseguir el mismo resultado, las propiedades de los objetos, en este caso un objeto “Range” (Rango), pueden ser modificadas sin necesidad de seleccionarlo.
Un ejemplo más como para que nos quede totalmente claro. Activamos la grabadora y borramos el contenido de un grupo de celdas:
Sub Macro4()
'
' Macro4 Macro
'
'
Range("A1:H5").Select
Selection.ClearContents
End Sub
Para, sobre todo, quienes se inician en el mundo del VBA, definitivamente la grabadora es una herramienta muy útil y ayuda mucho a aprender el uso métodos y las propiedades de los objetos pero hay que saber que hay mucho código innecesario que termina, no solo alargando nuestra macro, sino que en muchos casos hace más lentos lo procesos. Por ejemplo, lo que nos ha generado la grabadora en el ejemplo anterior, podríamos dejarlo así:
Sub BorrandoCeldas()
Range("A1:H5").ClearContents
End Sub
Aunque solo son dos líneas, podría quedar en una sola y además no olvidemos que es menos tiempo, y recursos en general, si no seleccionamos los objetos.
A veces nos acostumbramos tanto a seleccionar los objetos que aún sin usar la grabadora continuamos haciéndolo. He visto eso, sobre todo, cuando de copiar y pegar celdas se trata:
Sheets(“Hoja1”).Select
Range(“A1:A10”).Select
Selection.Copy
Sheets(“Hoja2”).Select
Range(“D1”).Select
ActiveSheet.Paste
Todas esas líneas podríamos dejarlas de la siguiente forma sin recurrir a seleccionar objetos:
Sheets(“Hoja1”).Range(“A1:A10”).Copy Destination:= Sheets(“Hoja2”).Range(“D1”)
Entonces, evitemos, de ser posible tanto el uso de “Select” como de “Selection”. Hasta la próxima.
Abraham Valencia
Excelente aporte. Gracias amigo!
ResponderBorrarMe gusto la sencillez, y lo claro, gracias
ResponderBorrary si el rango depende de un subindice dinamico, cual seria la sintaxis?
ResponderBorrarRange("A & i : F & i").Select ?, No funciona, como seria?