В Excel VBA я столкнулся с «ошибкой», которая останавливает макрос, и появляется сообщение «Выполнение кода было прервано». Я написал ошибку в цитатах, потому что, когда я выбрал отладку и просмотрел строку кода, вызвавшую ошибку, я увидел, что она была логически обоснованной.Выполнение кода было прервано
Первоначально я столкнулся с ошибкой в On Error GoTo 0
. Когда я комментирую блок вокруг ошибки, я получаю новую строку, которая производит ту же ошибку. И снова, когда я рассматриваю его в режиме отладки, новая «ошибка» логически звучит. Вот точная линия:
If rRange.Row <> 3 And rRange.Row <> 17 Then
FYI, rRange.Row = 3 в этом случае, так что это не должно приводить к ошибкам.
Почему это происходит и как я могу это исправить?
ОБНОВЛЕНИЕ Теперь код вызывает ошибку на линии End Sub
.
Вот секция, которая не:
Sub Review()
Dim WorkRange As Range
Dim FoundCells As Range
Dim Cell As Range
Dim a As String
Dim policy As String
Dim rRange As Range
Set RR = Sheets("Ready for Review")
Set OG = ActiveSheet
OG.Unprotect ("Password")
RR.Activate
On Error Resume Next
Application.DisplayAlerts = False
Set rRange = Application.InputBox(Prompt:= _
"Please select POLICY to review.", _
Title:="SPECIFY POLICY", Type:=8)
On Error GoTo 0
Application.DisplayAlerts = True
If rRange.Row <> 3 And rRange.Row <> 17 Then
MsgBox "Value other than a POLICY was selected. Select the cell that contains the correct policy number."
Exit Sub
Else
policy = rRange.Value
End If
Application.ScreenUpdating = False
OG.Cells(12, 2).Locked = False
Set WorkRange = OG.UsedRange
For Each Cell In WorkRange
If Cell.Locked = False Then
col1 = Cell.Column
Row = Cell.Row
a = OG.Cells(Row, 1)
If Not a = "" Then
row2 = Application.WorksheetFunction.Match(a, RR.Range("A:A"), 0)
Cell.Value = RR.Cells(row2, rRange.Column + col1 - 2)
End If
End If
Next Cell
OG.Unprotect ("Password")
OG.Cells(33, 3).Locked = False
If (Right(OG.Cells(5, 2), 2) = "UL" Or Right(OG.Cells(5, 2), 2) = "IL" Or Right(OG.Cells(5, 2), 2) = "PL") Then
With OG.Cells(33, 3)
.Value = "=IF(INDEX(B:B,MATCH(""Total*"",A:A,0))="""",0,INDEX(B:B,MATCH(""Total*"",A:A,0)))-SUM(C34:C37)"
.Locked = True
End With
ElseIf Right(OG.Cells(5, 2), 2) = "WL" Then
With OG.Cells(33, 3)
.Value = "=IF(INDEX(B:B,MATCH(""Total*"",A:A,0))="""",0,INDEX(B:B,MATCH(""*"",A:A,0))) - IFERROR(INDEX(C34:C37,MATCH(""Additional"",B34:B37, 0)),0) - IFERROR(INDEX(C34:C37,MATCH(""Paid"",B34:B37,0)),0) - IFERROR(INDEX(C34:C37,MATCH(""Additional Agreement - SPPUA"",B34:B37, 0)),0) - IFERROR(INDEX(C34:C37,MATCH(""Flexible Agreement - FLXT10/20"",B34:B37, 0)),0)"
.Locked = True
End With
Else
With OG.Cells(33, 3)
.Value = "=IF(INDEX(B:B,MATCH(""Total*"",A:A,0))="""",0,INDEX(B:B,MATCH(""*"",A:A,0)))"
.Locked = True
End With
End If
OG.Activate
Cells(Application.WorksheetFunction.Match("Last Month Paid ($)", Range("A:A"), 0), 2).NumberFormat = "$#,##0.00;[Red]$#,##0.00"
OG.Protect ("Password")
Application.ScreenUpdating = True
End Sub
Вы должны показать нам больше кода, чтобы помочь вам. –
Это длинная программа, и я не уверен, какие разделы будут информативными. Если вы можете дать мне представление о том, где искать, например, в блоках, где я использую обработку ошибок или блокировку/разблокировку ячеек, я был бы рад поделиться ими. –
Невозможно, чтобы я знал, что вы должны опубликовать, не зная, что делает ваш код. Вы можете начать с рутины, которая терпит неудачу. –