Итак, я работал над макросом, который унаследовал от моего коллеги, который ушел.Проблема в том, что, включая основные данные, создается более миллиона пустых строк.Этот лист создан из исходного листа, состоящего из 30000 строк.
Я - нуб VBA, поэтому я изучал код по частям, надеясь понять его.Я работал над этим последние четыре часа, но я не добился никакого прогресса.Я решил сделать отдельный макрос, который удаляет пустые строки после факта.Есть только одна проблема: мне нужно запустить макрос дважды, чтобы избавиться от миллиона пустых строк.
При первом запуске черные границы (перенесенные с первого листа) удаляются, оставляя миллион строк без полей.Я запускаю его во второй раз, что оставляет последнюю использованную ячейку.Я просто не понимаю, что происходит.Вот код, с которым я работал.
Sub DeleteUnused()
Dim myLastRow As Long
Dim myLastCol As Long
Dim wks As Worksheet
Dim dummyRng As Range
For Each wks In ActiveWorkbook.Worksheets
With wks
myLastRow = 0
myLastCol = 0
Set dummyRng = .UsedRange
On Error Resume Next
myLastRow = _
.Cells.Find("*", after:=.Cells(1), _
LookIn:=xlFormulas, lookat:=xlWhole, _
searchdirection:=xlPrevious, _
searchorder:=xlByRows).Row
myLastCol = _
.Cells.Find("*", after:=.Cells(1), _
LookIn:=xlFormulas, lookat:=xlWhole, _
searchdirection:=xlPrevious, _
searchorder:=xlByColumns).Column
On Error GoTo 0
If myLastRow * myLastCol = 0 Then
.Columns.Delete
Else
.Range(.Cells(myLastRow + 1, 1), _
.Cells(.Rows.Count, 1)).EntireRow.Delete
.Range(.Cells(1, myLastCol + 1), _
.Cells(1, .Columns.Count)).EntireColumn.Delete
End If
End With
Next wks
End Sub