Я рекомендую не использовать .Select
вместо того, чтобы дать лист в качестве параметра и указать лист во всех ws.Rows()
, ws.Columns()
и т. Д.
Если вы зададите параметр Optional
, вы можете вернуться кIf ws Is Nothing Then Set ws = ActiveSheet
если Task
вызывается без параметра.
Sub RepeatTask()
Dim xSh As Worksheet
Application.ScreenUpdating = False
For Each xSh In Worksheets
Task xSh 'give worksheet as parameter here instead of select!
Next
Application.ScreenUpdating = True
End Sub
Sub Task(Optional ws As Worksheet)
If ws Is Nothing Then Set ws = ActiveSheet
Dim LastColumnIndex As Long
Dim LastRowIndex As Long
Dim RowIndex As Long
Dim ColumnIndex As Long
Dim UsedRng As Range
Set UsedRng = ws.UsedRange
LastRowIndex = UsedRng.Row - 1 + UsedRng.Rows.Count
LastColumnIndex = UsedRng.Column - 1 + UsedRng.Columns.Count
Application.ScreenUpdating = False
For RowIndex = LastRowIndex To 1 Step -1
If Application.CountA(ws.Rows(RowIndex)) = 0 Then
ws.Rows(RowIndex).Delete
End If
Next RowIndex
For ColumnIndex = LastColumnIndex To 1 Step -1
If Application.CountA(ws.Columns(ColumnIndex)) = 0 Then
ws.Columns(ColumnIndex).Delete
End If
Next ColumnIndex
Application.ScreenUpdating = True
End Sub