VBA代码无法正常运行,因为它应该可以正常运行

时间:2020-07-22 10:26:09

标签: excel vba

使用此代码大约需要30秒才能完成100行150列的工作,因此我的数据正在迅速增加,很快代码将花费更多的时间来初始化。请指导我这段代码有什么问题。

Sub Colourise()
Dim r As Long, Val As String, C As Long
Worksheets("Assets").Activate
r = 1
Val = ActiveSheet.Cells(r, 43).Value
C = 6 '6 is yellow, 8 is cyan
For r = 1 To ActiveSheet.Rows.Count
IsEmpty(ActiveSheet.Cells(r, 43).Value) Then ' column 43 is client name
Exit For
End If
If ActiveSheet.Cells(r, 43).Value <> Val Then
If C = 8 Then
C = 6
Else
C = 8
End If
End If
ActiveSheet.Range(Cells(r, 1), Cells(r, 80)).Select ' column 80 is end of data
With Selection.Interior
.ColorIndex = C
.Pattern = xlSolid
End With
Val = ActiveSheet.Cells(r, 43).Value
Next
End Sub

1 个答案:

答案 0 :(得分:1)

这里的主要问题是您正在使用ActiveSheet.Rows.Count,它可能是2 ^ 20行(除非您的版本非常旧)。数据量将不会影响它运行的时间,因为您正在查看每行,无论是空的还是其他的行。它将始终扫描约100万行。

除了通过名称引用特定工作表之外,还应该使用UsedRange。

Dim ws as Worksheet
Set ws = Sheets("Your sheet")

For r = 1 To ws.UsedRange.Rows.Count
...