我最近完成了一些代码,它遍历excel中的所有工作表,然后根据特定列和该列中的值对它们进行排序
代码如下所示:
Sub sortingByLooping()
Dim rngName As Range
Dim sht As Worksheet
Dim LastRow As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each sht In ActiveWorkbook.Worksheets
sht.Activate
Set rngName = sht.Range("1:1").Find(What:="SOMENAME", MatchCase:=False)
If Not rngName Is Nothing Then
LastRow = sht.Cells(sht.Rows.Count, rngName.Column).End(xlUp).Row
On Error Resume Next
Set emptyDates = sht.Range(rngDate, sht.Cells(LastRow, rngDate.Column)).SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
End If
sht.Sort.SortFields.Clear
If Not rngName Is Nothing Then
sht.Sort.SortFields.Add Key:=rngName, _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
End If
sht.Sort.SetRange sht.Cells
sht.Sort.Header = xlYes
sht.Sort.MatchCase = False
sht.Sort.Orientation = xlTopToBottom
sht.Sort.SortMethod = xlPinYin
sht.Sort.Apply
Next sht
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
这段代码很好用(我理解整个"用"和#34;用"块结束但我这样做是因为我发现它在视觉上更容易阅读)。
但是我事先尝试过这样做:
sht.Sort.SetRange(sht.Cells)
当我设置范围时,我在sht.cells周围加上括号,然后我遇到了#34; Out of Memory"错误。我很快就将它改回了没有括号来纠正这个问题。
但是现在我想知道为什么当我在sht.cells周围添加括号时出现这个错误以及为什么当我不在sht.cells周围加括号时我不会得到这个错误?围绕此问题的内存问题是什么,我是否应该知道涉及这一特定代码行的任何其他风险?
由于
答案 0 :(得分:3)
围绕(sht.Cells)
的括号将评估整张表格,以生成整个内容的二维数组(所有一百万行x 16k列)。那不是你想要在这里发生的事情。
尝试在工作表上使用更具体的范围,然后删除括号。