Ich habe ein Excel-Arbeitsblatt, das eine Schaltfläche enthält.
Wenn ich die Funktion usedRange() aufrufe, enthält der zurückgegebene Bereich den Teil mit der Schaltfläche.
Gibt es eine Möglichkeit, wie ich den tatsächlich verwendeten Bereich, der Daten enthält, abrufen kann?
Welche Art von Schaltfläche, weder ein Forms Control noch ein ActiveX Control sollte den verwendeten Bereich beeinflussen.
Es ist ein bekanntes Problem, dass Excel den verwendeten Bereich nicht sehr gut im Auge behält. Jeder Verweis auf den verwendeten Bereich über VBA setzt den Wert auf den aktuell verwendeten Bereich zurück. Versuchen Sie daher, diese Unterprozedur auszuführen:
Sub ResetUsedRng()
Application.ActiveSheet.UsedRange
End Sub
Andernfalls kann es gut sein, dass Sie noch einige Formatierungen haben. Versuchen Sie, alle Zellen nach der letzten Zeile zu leeren/löschen.
Siehe dazu auch oben:
Eine andere Methode, um die zuletzt verwendete Zelle zu finden:
Dim rLastCell As Range
Set rLastCell = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
Ändern Sie die Suchrichtung, um die erste verwendete Zelle zu finden.
Readify hat eine sehr vollständige Antwort gegeben. Dennoch wollte ich die End
-Anweisung hinzufügen, die Sie verwenden können:
Suchen Sie die letzte verwendete Zelle vor einem Leerzeichen in einer Spalte:
Sub LastCellBeforeBlankInColumn()
Range("A1").End(xldown).Select
End Sub
Suche nach der allerletzten verwendeten Zelle in einer Spalte:
Sub LastCellInColumn()
Range("A" & Rows.Count).End(xlup).Select
End Sub
Suche nach der letzten Zelle vor einem Leerzeichen in einer Zeile:
Sub LastCellBeforeBlankInRow()
Range("A1").End(xlToRight).Select
End Sub
Suche nach der allerletzten verwendeten Zelle in einer Zeile:
Sub LastCellInRow()
Range("IV1").End(xlToLeft).Select
End Sub
Siehe hier für weitere Informationen (und die Erklärung, warum xlCellTypeLastCell
nicht sehr zuverlässig ist).
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