VBA中排序功能的内存分配

时间:2017-10-20 16:01:24

标签: excel vba excel-vba

我最近完成了一些代码,它遍历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周围加括号时我不会得到这个错误?围绕此问题的内存问题是什么,我是否应该知道涉及这一特定代码行的任何其他风险?

由于

1 个答案:

答案 0 :(得分:3)

围绕(sht.Cells)的括号将评估整张表格,以生成整个内容的二维数组(所有一百万行x 16k列)。那不是你想要在这里发生的事情。

尝试在工作表上使用更具体的范围,然后删除括号。