使用 Null(或其他东西)来避免 'Out of Memory'

Using Null (or something else) to avoid 'Out of Memory'

我有这段代码会根据不同的参数以 table 不同的颜色突出显示 select 行数据:

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',但是返回了 'Invalid Use of Null' 的消息,此后这些变量就没用了,需要删除重新工作的代码。

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

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

除了你的代码处理一个 Range 之外的实际文件后,它会发生变化并被 UserForm 调用,这不是内存问题的直接原因。

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

通过在处理完 UserForm.Load.Show 之后正确使用 .Unload,在需要时再次正确释放内存。