jueves, 1 de mayo de 2014

VBA: Diferencias entre UsedRange y CurrentRegion.

Dedicaré un espacio a explicar la diferencia entre las propiedades UsedRange y CurrentRegion.
Aunque en apariencia podrían ser similares hay un matiz diferenciador, que debemos conocer.
.UsedRange: devuelve un objeto Range que representa el rango utilizado en la hoja de cálculo especificada.
.CurrentRegion: devuelve un objeto Range que representa la región actual (Nota: la región actual es un rango limitado por cualquier combinación de filas y columnas vacías).

Dicho de otro modo, CurrentRegion es el rango rectangular de celdas no en blanco que rodea el objeto Range a la que estamos llamando CurrentRegion.
CurrentRegion deberemos utilizarlo con cuidado, ya que a veces tiene un comportamiento 'complicado'.

UsedRange es una propiedad del objeto WorkSheet; y CurrentRegion es una propiedad del objeto Range.


Para explicarlo más claramente mostraremos un sencillo ejemplo sobre nuestra hoja de cálculo:

VBA: Diferencias entre UsedRange y CurrentRegion.


Vemos claramente don rangos discontinuos de celdas con valores con celdas vacías entremedias: A1:C3 y E6:H7.
Si empleamos .CurrentRegion:

Sub MsgBox_CurrentRegion()
MsgBox Sheets("Hoja1").Cells(1, 1).CurrentRegion.Address(RowAbsolute:=True, ColumnAbsolute:=True, ReferenceStyle:=xlA1)
End Sub 

Devolverá: $A$1:$C$3 ó lo que es igual el Rango R1C1:R3C3 en estilo R1C1

VBA: Diferencias entre UsedRange y CurrentRegion.



Si utilizamos .UsedRange:

Sub MsgBox_UsedRange()
MsgBox Sheets("Hoja1").UsedRange.Address(RowAbsolute:=True, ColumnAbsolute:=True, ReferenceStyle:=xlA1)
End Sub

Devolverá: $A$1:$H$7 ó lo que es igual el Rango R1C1:R7C8 en estilo R1C1

VBA: Diferencias entre UsedRange y CurrentRegion.



Conociendo las diferencias entre ambas podremos aprovecharnos de ellas para conseguir definir variables para nuestros procedimientos... de manera especial para aquellas que nos sirvan para delimitar rangos.

No hay comentarios:

Publicar un comentario en la entrada