после использованного диапазона
Просто используйте это в своем коде:
With ActiveSheet.Cells
ActiveSheet.Cells(.Find(What:="*", SearchDirection:=xlPrevious, _
SearchOrder:=xlByRows).Row + 1, _
.Find(What:="*", SearchDirection:=xlPrevious, _
SearchOrder:=xlByColumns).Column + 1).Select
End With
Объяснить:
Sub AfterUsedRange()
Dim LastRow As Long
Dim LastCol As Integer
With ActiveSheet.Cells
'Find the LAST real row
LastRow = .Find(What:="*", SearchDirection:=xlPrevious, _
SearchOrder:=xlByRows).Row
' Find the LAST real column
LastCol = .Find(What:="*", SearchDirection:=xlPrevious, _
SearchOrder:=xlByColumns).Column
End With
ActiveSheet.Cells(LastRow + 1, LastCol + 1).Select
End Sub
Чтобы использовать его в макросе:
Sub AfterUsedRange()
Cells(.Find(What:="*", SearchDirection:=xlPrevious, _
SearchOrder:=xlByRows).Row + 1, _
.Find(What:="*", SearchDirection:=xlPrevious, _
SearchOrder:=xlByColumns).Column + 1).Select
End Sub
или вы можете отремонтировать:
Sub AfterUsedRange()
Cells(.Find(What:="*", SearchDirection:=xlPrevious, _
SearchOrder:=xlByRows).Row, _
.Find(What:="*", SearchDirection:=xlPrevious, _
SearchOrder:=xlByColumns).Column).Offset(1, 1).Select
End Sub
приписка
Чтобы доказать слухи о том, что функции «UsedRange» и «SpecialCells», по крайней мере, НЕ являются надежными, если их не использовать на самом деле факт
Ссылаясь на строку кода:
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 1).Select
в отличие от моей обновленной строки кода (первой в ответе)
ActiveSheet.Cells(.Find(What:="*", SearchDirection:=xlPrevious, _
SearchOrder:=xlByRows).Row, _
.Find(What:="*", SearchDirection:=xlPrevious, _
SearchOrder:=xlByColumns).Column).Offset(1, 1).Select
Давайте назовем первую строку: SpecialCellsCode .
Давайте назовем вторую строку: MyCode .
В следующей таблице показан простой самоочевидный сценарий.
A B C D
1 1 1 1
2 2 2
3 3 y
4 x
Давайте назовем 'пересечение' первой строки и первого столбца после 'UsedRange': AfterUsedRangeAddress .
Теперь при открытии рабочего листа. MyCode правильно вычисляет, что AfterUsedRangeAddress равно D4
и выбирает его (x), а также SpecialCellsCode . Когда мы удаляем значение 3 в столбце 'C
', MyCode правильно вычисляет, что AfterUsedRangeAddress равно D3
, и выбирает его (y), , но SpecialCellsCode неправильно все еще вычисляет D4
и выбирает этот (x).
В заключение, SpecialCellsCode имеет значение , по крайней мере ненадежное, если не непригодное для использования .
Идея даже подумать о таком тесте и продолжить расследование была взята из вопроса VBA: UsedRange не обновляется правильно .