使用空(或其他)来避免“内存不足”

我有这段代码,它将根据不同的参数来突出显示表中不同颜色的数据行:

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 

我改变了我的原始代码,以产生上述,使其做我想要的。 现在,当我运行我的系统时,我正在不断收到“内存不足”信息。 这似乎是由于If语句的最后一部分,其中所有不符合先前条件的单元格将突出显示为默认颜色。 我试图用一个variables来引用这个范围,然后在完成它的使用后把这个variables设置为'Nothing',但是返回了'Invalid Use of Null'的消息,之后这些variables没有用,需要删除这些代码再次工作。

基本上,我想摆脱“内存不足”的消息,而不是搞砸了我的整个代码。

在查看除代码之外的实际文件之后,可以看到UserForm调用的Range不是内存问题的直接原因。

因为使用.Show (对于特定的UserForm )时有多个正被加载到内存中的UserForm 。 它们不会从内存中释放, .UnloadUserForm处理后使用.Unload ,但在后台保持活动状态并占用内存空间。

通过正确使用.Unload处理.Load UserForm.Load.Show ,再次显示UserForm时,内存将被正确释放。

你可以尝试使用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