Application.Отменить ошибку и перейти к ExitSub - PullRequest
0 голосов
/ 04 июля 2019

Я работаю над Excel Macro для множественного выбора в выпадающем списке Excel.Наткнулся на следующий код для множественного выбора

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Oldvalue As String
Dim Newvalue As String
Application.EnableEvents = True
On Error GoTo Exitsub

If Target.Column = 7 And (Target.Row >= 1 And Target.Row <= 5000) Then
  If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then
    GoTo Exitsub
  Else: If Target.value = "" Then GoTo Exitsub Else
    Application.EnableEvents = False
    Newvalue = Target.value
    Application.Undo
    Oldvalue = Target.value
      If Oldvalue = "" Then
        Target.value = Newvalue
      Else
        If InStr(1, Oldvalue, Newvalue) = 0 Then
            Target.value = Oldvalue & " # " & Newvaluae
      Else:
        Target.value = Oldvalue
      End If
    End If
  End If
End If
Application.EnableEvents = True
Exitsub:
MsgBox "Error"
Application.EnableEvents = True
End Sub

Это более или менее стандартный код для множественного выбора, как я узнал из Интернета.Но здесь я столкнулся с некоторой проблемой.

Когда я изменяю значение в раскрывающемся списке, следующая строка вызывает некоторые проблемы:

Application.Undo

и отправляет элемент управления на ExitSubкоторый я проверил, разместив там MsgBox.

Может кто-нибудь указать, почему этот код не работает?Я использую MS Excel 2016, если это поможет

Редактировать:

Я заметил ошибку в коде и исправил ее, что, по моему мнению, и стало причиной поведения.Он работал один или два раза после изменения, но, опять же, возникает та же проблема.Я изменил следующую строку:

Target.value = Oldvalue & " # " & Newvaluae

на эту

Target.value = Oldvalue & " # " & Newvalue

Я действительно не понимаю причину такого поведения кода.Будет здорово, если кто-нибудь сможет пролить немного света.

1 Ответ

0 голосов
/ 04 июля 2019

Ну, я нашел ошибку в коде. Это был действительно незначительный. Должно быть:

Target.value = Oldvalue & " # " & Newvalue

вместо

Target.value = Oldvalue & " # " & Newvaluae

Последний аргумент был написан неправильно.

...