我对VBA编码还是陌生的,就像大多数在这里提出类似问题的人一样。 :) 我编写了一个代码,该代码可以无任何错误地运行,但是由于某些原因,如果第二部分在一组中运行,则不会执行。出乎意料的是,如果我自己运行代码的第二部分,它将完成其工作。 有人可以给我一些指导来导致此问题的原因吗?
Sub Macro1()
Endrow1 = Cells(Rows.Count, 1).End(xlUp).Row
Dim j As Integer
Dim k As Integer
For i = 3 To Endrow1
With Sheets("Sheet1").Cells(i, 1)
If Cells(i, 1).Value = "No" Then Cells(i, 1).Value = ""
If Left(.Value, 3) = "Yes" Then
Rows(i).Font.Bold = True
a = Cells(i, 3).Value
For j = 0 To 30
Cells(j + i, 12).Value = a
Next j
End If
End With
Next i
'------------------------------------------------------------------- Second Part:
For j = 3 To 300
With Sheets("Sheet1").Cells(j, 7)
If Cells(j, 7).Value >= a And Cells(j, 7) <= Cells(1, 11) Then
If Cells(j, 12) = Cells(j, 12) Then
On Error Resume Next
For k = 0 To 30
If Cells(j + k, 12) = Cells(j, 12) Then Cells(j + k, 12).Interior.Color = 255
If Cells(j - k, 12) = Cells(j, 12) Then Cells(j - k, 12).Interior.Color = 255
Next k
End If
End If
End With
Next j
End Sub
答案 0 :(得分:0)
调试此代码时,是否会超出“ If Cells(j,7).Value> = a And Cells(j,7)<= Cells(1,11)Then”这个条件?此外,隐藏“下一个错误时恢复”是什么?最后,我认为您的“使用”结构没有任何作用。
谢谢您的回答,马丁。该问题是由第二部分中的第一条if语句引起的。 这是正确的版本:
For j = 3 To 300
With Sheets("Sheet1").Cells(j, 7)
If Cells(j, 7).Value <= Cells(1, 11) Then
If Cells(j, 12) = Cells(j, 12) Then
On Error Resume Next
For k = 0 To 30
If Cells(j + k, 12) = Cells(j, 12) Then Cells(j + k, 12).Interior.Color = 255
If Cells(j - k, 12) = Cells(j, 12) Then Cells(j - k, 12).Interior.Color = 255
Next k
End If
End If
End With
下一个j
稍后我将摆脱with语句。 :)