Приветствую. Может быть кому-то еще будет интересно. Столкнулся с "жирностью" и в поисках набрел на это решение, которое оказалось нерабочим минимум в Excel 2010 в части очистки/удаления "заграничных" ячеек. Других удобных и работающих вариантов не нашлось, так что потратил время на разборки и доработку предложенного здесь. Правки ниже касаются функции Очистить_СтолбцыСтроки. Ошибочно определялось (скорее не определялось) значение переключателя _ЧиститьУдалять. И не работал оператор, задающий диапазон ячеек для последующей чистки/удаления (Set rToClear=...), диапазон оказывался пустым из-за переполнения. После некоторых раздумий родился фикс, успешно справляющийся со своей задачей. Неработающие строки закомментированы, следом идут работающие.
Код
If Not IsSheetEmpty(wsh) Then
Set cLastCell = wsh.Cells.Find("*", wsh.Cells(1), xlFormulas, xlPart, xlByColumns, xlPrevious, False, False)
If cLastCell.Column < wsh.Columns.Count Then
' Set rToClear = Range(wsh.Columns(cLastCell.Column + 1), wsh.Cells(wsh.Cells.Count))
' If ThisWorkbook.Names("_ЧиститьУдалять") = 1 Then
If ThisWorkbook.Names("_ЧиститьУдалять").RefersToRange.Value = 1 Then
' rToClear.Clear
wsh.Columns((cLastCell.Column + 1) & ":" & wsh.Columns.Count).Clear
Else
' rToClear.Merge 'защита от автокоррекции высоты строк
wsh.Columns((cLastCell.Column + 1) & ":" & wsh.Columns.Count).Merge
' rToClear.Delete
wsh.Columns((cLastCell.Column + 1) & ":" & wsh.Columns.Count).Delete
End If
End If
Set cLastCell = wsh.Cells.Find("*", wsh.Cells(1), xlFormulas, xlPart, xlByRows, xlPrevious, False, False)
If cLastCell.Row < wsh.Rows.Count Then
' Set rToClear = Range(wsh.Rows(cLastCell.Row + 1), wsh.Cells(wsh.Cells.Count))
' If ThisWorkbook.Names("_ЧиститьУдалять") = 1 Then
If ThisWorkbook.Names("_ЧиститьУдалять").RefersToRange.Value = 1 Then
' rToClear.Clear
wsh.Rows((cLastCell.Row + 1) & ":" & wsh.Rows.Count).Clear
Else
' rToClear.Merge
wsh.Rows((cLastCell.Row + 1) & ":" & wsh.Rows.Count).Merge
' rToClear.Delete
wsh.Rows((cLastCell.Row + 1) & ":" & wsh.Rows.Count).Delete
End If
End If
End If