Вероятно, это не совсем простой способ, пока выглядит хорошо, но вы можете опустить размер столбца, если он не изменится: rng.Resize(Rowsize:=rows - 1)
. И поэтому вам не нужно cols = rng.Columns.Count
.
Если возможно, избегайте использования ActiveSheet
, это легко можно изменить, щелкнув пользователем. Лучше использовать ThisWorkbook.Worksheets("NameOfSheet").PivotTables…
Option Explicit
Sub SelectDataBodyRange()
Dim rng As Range
Set rng = ActiveSheet.PivotTables("PivAuswertung").DataBodyRange
'if possible name your sheet and don't use ActiveSheet. Better ThisWorkbook.Worksheets("NameOfSheet").PivotTables…
'Resize selection, exclude last row
Set rng = rng.Resize(RowSize:=rng.rows.Count - 1)
rng.Select
End Sub
Или даже это должно работать
Option Explicit
Sub SelectDataBodyRange()
With ActiveSheet.PivotTables("PivAuswertung").DataBodyRange
.Resize(RowSize:=.Rows.Count - 1).Select
End With
End Sub
Если вам нужно делать это чаще в вашем коде на большем количестве диапазонов, тогда я предлагаю использовать функцию для it:
Option Explicit
Public Function RemoveLastRowsFromRange(ByVal FromRange As Range, Optional ByVal RowCount As Long = 1) As Range
Set RemoveLastRowsFromRange = FromRange.Resize(RowSize:=FromRange.Rows.Count - RowCount)
End Function
Sub SelectDataBodyRange()
'removes 1 rows (1 is default)
RemoveLastRowsFromRange(ActiveSheet.PivotTables("PivAuswertung").DataBodyRange).Select
'removes 5 rows
RemoveLastRowsFromRange(ActiveSheet.PivotTables("PivAuswertung").DataBodyRange, 5).Select
End Sub
Еще одно замечание: если вы объявляете Dim rows, cols As Integer
only cols
, это Integer
, но rows
это Variant
. В VBA вам нужно объявить тип для каждой переменной или это Variant
по умолчанию. Кроме того, в Excel больше строк, чем умещается в Integer
, поэтому вы должны использовать Long
вместо: Dim rows As Long, cols As Long
. Поскольку нет никакой пользы от использования Integer
вообще в VBA, я рекомендую всегда использовать Long
вместо.