在VBA

2017-10-20 52 views
1

排序功能的內存分配我最近完成了一些代碼,通過我在Excel中的所有圖紙循環,然後對其進行排序基於特定的列和在VBA

的代碼如下所示該列中的值:

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 

此代碼OFC很好地工作(我整明白「與」和塊「結尾」,但我就是這麼做的,因爲我發現它在視覺上更易於閱讀)。

不過我想先這樣做:

sht.Sort.SetRange(sht.Cells)

我把括號圍繞sht.cells當我設置的範圍,我被擊中了與「出內存「錯誤。我迅速將其改回爲沒有括號來糾正問題。

但是現在我想知道爲什麼當我將括號放在sht.cells周圍時爲什麼會出現此錯誤,並且爲什麼當我不在sht.cells周圍放置括號時沒有出現此錯誤?圍繞這個問題的內存問題是什麼,並且我還應該瞭解涉及這個特定代碼行的其他風險嗎?

由於

回答

3

括號周圍(sht.Cells)評估整個片材以產生整個內容的2-d陣列(100萬個奇數行×16k的列)。這不是你想在這裏發生的。

嘗試在表單上使用更具體的範圍,然後刪除括號。

+0

哦,好的。那我肯定會那樣做。感謝您的信息。 :) – Gman

+0

@Gman你可能想掃描你的程序調用中的冗餘括號代碼。提示:在'DoSomething(foo)'中,parens是*參數*語法的一部分,而在'bar = DoSomething(foo)'中,parens是*參數列表*語法的一部分。注意缺少空格。 –