使用Null(或其他东西)来避免'内存不足'

时间:2015-09-08 15:56:11

标签: excel vba null out-of-memory

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

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”,但是返回了“无效使用空”的消息,之后这些变量无用,需要删除代码再次工作。

基本上,我想在不搞砸我整个代码的情况下摆脱“Out of Memory”消息。

2 个答案:

答案 0 :(得分:2)

在查看除代码处理之外的实际文件后,Range变化并被UserForm调用,这不是导致内存问题的直接原因。

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

在需要处理.UnloadUserForm.Load .Show之后正确使用UserForm,可以再次正确释放内存。

答案 1 :(得分:0)

您可以尝试使用案例陈述。这样的事情。

    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