Tengo una hoja de Excel que tiene un botón.
Cuando llamo a la función usedRange(), el rango que devuelve incluye la parte del botón.
¿Hay alguna forma de obtener el rango usado que contiene los datos?
Qué tipo de botón, ni un Forms Control ni un control ActiveX debe afectar al rango utilizado.
Es un problema conocido que Excel no mantiene la pista del rango usado muy bien. Cualquier referencia al rango usado a través de VBA restablecerá el valor al rango usado actual. Así que intente ejecutar este subprocedimiento:
Sub ResetUsedRng()
Application.ActiveSheet.UsedRange
End Sub
Si no, es posible que tenga algún formato colgando. Intente borrar todas las celdas después de la última fila.
En cuanto a lo anterior también ver:
Consejo para desarrolladores de Excel
Otro método para encontrar la última celda utilizada:
Dim rLastCell As Range
Set rLastCell = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
Cambia la dirección de búsqueda para encontrar la primera celda utilizada.
Readify hizo una respuesta muy completa. Sin embargo, quería añadir la declaración End
, puede utilizar:
Encontrar la última celda utilizada, antes de un espacio en blanco en una columna:
Sub LastCellBeforeBlankInColumn()
Range("A1").End(xldown).Select
End Sub
Encontrar la última celda utilizada en una columna:
Sub LastCellInColumn()
Range("A" & Rows.Count).End(xlup).Select
End Sub
Encontrar la última celda, antes de un espacio en blanco en una Fila:
Sub LastCellBeforeBlankInRow()
Range("A1").End(xlToRight).Select
End Sub
Buscar la última celda utilizada en una fila:
Sub LastCellInRow()
Range("IV1").End(xlToLeft).Select
End Sub
Ver aquí para más información (y la explicación de por qué xlCellTypeLastCell
no es muy fiable).
Public Sub FindTrueUsedRange(RowLast As Long, ColLast As Long)
Application.EnableEvents = False
Application.ScreenUpdating = False
RowLast = 0
ColLast = 0
ActiveSheet.UsedRange.Select
Cells(1, 1).Activate
Selection.End(xlDown).Select
Selection.End(xlDown).Select
On Error GoTo -1: On Error GoTo Quit
Cells.Find(What:="*", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Activate
On Error GoTo -1: On Error GoTo 0
RowLast = Selection.Row
Cells(1, 1).Activate
Selection.End(xlToRight).Select
Selection.End(xlToRight).Select
Cells.Find(What:="*", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Activate
ColLast = Selection.Column
Quit:
Application.ScreenUpdating = True
Application.EnableEvents = True
On Error GoTo -1: On Error GoTo 0
End Sub