Excel VBA для L oop запускается несколько раз - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть код Excel VBA, который выполняет больше проверок при изменении листа. Все работает нормально, но у меня есть для l oop, чтобы проверить наличие дубликатов. тот запускается несколько раз и выдает одно и то же окно сообщения 10 или 20 раз. Можете ли вы дать мне несколько советов? Полный код:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim userVal As String
Dim LastRow As Long

'check if active column is 1
If Target.Column <> 1 Or Selection.Count > 1 Then Exit Sub

'check if cell is not empty
If Target.Value = "" Then Exit Sub

'remove points and lines
userVal = Replace(Replace(Target.Value, ".", ""), "-", "")

'check length to be 12
If Len(userVal) <> 12 Then
    Target.EntireRow.Delete
    MsgBox ("Please insert a 12-digit number")
'add points and line
Else
    userVal = Left(userVal, 4) & "." & Mid(userVal, 5, 3) & "." & Mid(userVal, 8, 3) & "-" & Right(userVal, 2)
    Target = userVal
End If

'check for duplicates
LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
For i = 2 To LastRow
    If Cells(i, 1).Value = userVal Then
        Target = ""
        MsgBox ("Part number already exists at line " & i)
        If i = LastRow Then Exit Sub
    End If

Next

End Sub

1 Ответ

0 голосов
/ 23 апреля 2020

Код выглядит хорошо для меня. Я бы сказал, что вы просто имеете userVal несколько раз в столбце «A», и поэтому он также запускает msgbox несколько раз.

EDIT: я заметил, что ваш код живет в событии изменения. Когда вы перезаписываете Target = "", я считаю, что это может перезапускать всю процедуру снова и снова.

...