【发布时间】:2018-08-17 23:04:44
【问题描述】:
我正在尝试运行宏,但现在它一直冻结 excel。 它使用 10 个单元格运行,但当宏应用于将近 200 个单元格时,它会冻结并崩溃。
Sub eancheck()
Dim s1 As Worksheet, s2 As Worksheet
Dim Msg As String
Set s1 = Sheets("Sheet1")
Set s2 = Sheets("Sheet3")
Dim lr1 As Long, lr2 As Long
lr1 = s1.Range("A" & Rows.Count).End(xlUp).Row
lr2 = s2.Range("a" & Rows.Count).End(xlUp).Row
Dim i As Long, j As Long
Application.ScreenUpdating = False
For i = 2 To lr1
s1.Cells(i, "D").Interior.ColorIndex = 0
For j = 2 To lr2
If s2.Range("A" & j) = s1.Range("D" & i) Then
's1.Range("D" & i) = s2.Range("B" & j)
s1.Cells(i, "D").Interior.ColorIndex = 3
End If
Next j
Next i
Application.ScreenUpdating = True
End Sub
我也遇到了其他宏的问题,我认为是因为范围的大小。我该如何解决?
注意:当在包含两列的工作表中搜索 10 个值时,宏会运行,每列几乎有 200.000 个值,但是当 10 不是 200 时,会崩溃。
【问题讨论】:
-
跨行 lr1= 和 lr2= 时按 F8 一次执行代码,将鼠标悬停在这两个变量上并查看它们的内容。
-
Dim i As Long, j As Long
-
显而易见的是 lr1 和 lr2 的值是什么。我怀疑你需要两个循环。另外,为什么不使用条件格式?
-
我认为颜色索引刻度上的无填充是 -4142。
-
@CátiaFonseca 您有两个循环,其中一个 i 值它为 j 在这种情况下迭代 200 次,这不是必需的。