Excel vba userform afterupdate срабатывает при очистке текстового поля - PullRequest
0 голосов
/ 23 марта 2020

У меня есть простая пользовательская форма с 5 текстовыми полями. Я могу обработать данные, используя командную кнопку «ДОБАВИТЬ», но, учитывая, что в одном сеансе может быть 100 записей, было бы немного быстрее и проще, если бы процедура запускалась с помощью sub [last textbox] _afterupdate ().

Проблема: при очистке текстовых полей последнее запускает процедуру снова. Вот код:

Private Sub txtagainst2_afterupdate()


Set rTeam = [A4:A50].Find(txtTeam, lookat:=xlWhole)
Set rTeam = rTeam.Resize(1, 15)
With rTeam
    code to do stuff with the textbox values
End With
txtTeam = ""
txtFor1 = ""
txtAgainst1 = ""
txtFor2 = ""
txtAgainst2 = ""
txtTeam.SetFocus

End Sub

Я испробовал несколько возможностей, но не могу его взломать.

Любой совет или решение будут по-настоящему оценены.

Спасибо Петр

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Майкл. Спасибо. Ваше решение было тем, которое я пробовал перед публикацией, но по какой-то причине пошаговое руководство возвращается к началу процедуры и запускает его во второй раз (как и раньше). Я попробовал это снова только сейчас с тем же результатом. Он не обновляется второй раз, потому что txtAgainst2 пусто.

Но ... пробовал оператор if в начале процедуры (ниже). Пришлось установить все, кроме вкладок textboxes в = false, потому что не установил бы фокус на textbox1. Это похоже на работу. Все еще не уверен в обосновании.

private sub txtagainst2_afterupdate ()

If txtAgainst2 = "" Then GoTo handler:

Set rTeam = [A4:A50].Find(txtTeam, lookat:=xlWhole)
Set rTeam = rTeam.Resize(1, 15)
With rTeam
do stuff
End With
txtTeam = ""
txtFor1 = ""
txtAgainst1 = ""
txtFor2 = ""
txtAgainst2 = ""
txtTeam.SetFocus
Exit Sub

handler: txtTeam.SetFocus Выход Sub Sub Sub *

Еще раз спасибо за вашу помощь.

0 голосов
/ 23 марта 2020

Чтобы код сам по себе не запускался (или любой другой код), вам необходимо временно отключить события вокруг строки (строк) кода, которые запускают события:

Вместо просто:

txtAgainst2 = ""

Использование:

Application.EnableEvents = False
txtAgainst2 = ""
Application.EnableEvents = True

Это предотвратит событие «AfterUpdate», запускаемое при обновлении текстового поля.

...