2015-09-08 49 views
3

我的代碼,將根據不同的參數表不同的顏色中突出數據的選擇行這段代碼:使用空(或別的東西),以避免「內存不足」

Public Sub HighlightRecentSampleRequests() 

Dim sht As Worksheet 
Dim LastRow As Long 
Dim cell As Range 
Dim dt, txt 

Set sht = Worksheets("Sample Transfer Log") 
LastRow = sht.Cells(Rows.Count, "A").End(xlUp).Row 

For Each cell In sht.Range("K3:K" & LastRow).Cells 
    dt = cell.Value 
    txt = cell.Offset(0, -3).Value 
If dt >= Date - 7 And txt = "Sample Receipt" Then 
    cell.Range("A1:P1").Offset(0, -10).Interior.ColorIndex = 45 'orange 
ElseIf dt >= Date Then 
    cell.Range("A1:P1").Offset(0, -10).Interior.ColorIndex = 6 'yellow 
Else 
    cell.Range("A1:P1").Offset(0, -10).Interior.Color = RGB(220, 230, 242) 'default color 
End If 
Next 

End Sub 

我做了改變我的原始代碼,以產生上述,使它做我想要的。現在,當我運行我的系統時,我正在不斷收到「Out of Memory」消息。這似乎是由於If語句的最後部分,其中所有不符合先前條件的單元格都將高亮顯示爲默認顏色。我試圖用變量引用該範圍,然後在完成使用後將該變量設置爲'Nothing',但返回了'無效使用Null'的消息,之後這些變量無用,需要刪除代碼再次工作。

基本上,我想擺脫'內存不足'的消息,而不用擰我的整個代碼。

+2

任何不使用條件格式而不是vba的理由? – DragonSamu

+0

不知道是否range.interior.color將採取十六進制,但你可以嘗試。 http://dmcritchie.mvps.org/excel/colors.htm – MatthewD

+0

如何不將它設置爲任何顏色。出於何種原因,您將其設置爲默認值?它不是默認的嗎? – MatthewD

回答

2

看實際文件除了你的代碼處理Range而變化,並正在由一個UserForm稱它爲後是不是內存問題的直接原因。

因爲當使用.Show(對於特定的UserForm),有多個UserForms正被加載到內存中。在處理完UserForm後,他們不會通過使用.Unload從內存中釋放內存,但會保持活動狀態並佔用內存空間。

通過後適當地使用具有.Unload處理的UserForm.Load.ShowUserForm再次需要時存儲器正確地釋放。

0

你可以嘗試使用case語句。像這樣的東西。

Select Case dt 
     Case Is >= Date - 7 
      If txt = "Sample Receipt" then 
       cell.Range("A1:P1").Offset(0, -10).Interior.ColorIndex = 45 'orange 
      End If 
     Case Is >= Date 
      cell.Range("A1:P1").Offset(0, -10).Interior.ColorIndex = 6 'yellow 
     Case Else 
      cell.Range("A1:P1").Offset(0, -10).Interior.Color = RGB(220, 230, 242) 'default color 
    End Select