我有这段代码,它会根据不同的参数突出显示表中不同颜色的选定数据行:
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”消息。
答案 0 :(得分:2)
在查看除代码处理之外的实际文件后,Range
变化并被UserForm
调用,这不是导致内存问题的直接原因。
因为在使用UserForms
时(对于特定的.Show
),有多个UserForm
被加载到内存中。在处理.Unload
之后使用UserForm
但在后台保持活动并占用内存空间时,它们不会从内存中释放。
在需要处理.Unload
和UserForm
或.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