使用 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
,在需要时再次正确释放内存。
我有这段代码会根据不同的参数以 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
,在需要时再次正确释放内存。