2016-12-19 3 views
0

Я пишу скрипт для UserForm, через который пользователи могут зарегистрироваться для доступа к базе данных. UserForm имеет три поля: Username, Password и Confirm Password.Выберите ComboBox AfterUpdate Excel VBA

Я сделал так, чтобы после того, как пользователь выберет имя пользователя, сценарий запускает VLookUp через существующие имена пользователей, чтобы проверить, существует ли уже выбранное имя пользователя. Если это так, появляется сообщение MsgBox, предлагающее выбрать другое имя пользователя. В этом случае все три поля поля UserForm очищаются. Я бы хотел, чтобы курсор располагался в поле Username, чтобы пользователь мог сразу заполнить другое имя пользователя. Однако после того, как все поля будут очищены, вместо password. Как я могу это решить? Спасибо за помощь.

Это код, который я написал:

Private Sub usernameinput_AfterUpdate() 

Dim username As String 
username = usernameinput.Text 

Dim temp As String 
On Error Resume Next 
temp = WorksheetFunction.VLookup(Me.usernameinput.Value, Range("Usernames"), 1, 0) 

If username = temp Then 
    MsgBox ("The username chosen already exists. Please chose a different username."), vbOKOnly + vbInformation, "Existing Username" 
    Err.Clear 
    temp = "" 
    Me.usernameinput.Value = "" 
    Me.passwordinput.Value = "" 
    Me.passwordconfirm.Value = "" 
    Me.usernameinput.SetFocus 
    On Error GoTo 0 
End If 

End Sub 
+1

У вас есть обработчики для любого из этих элементов управления? Возможно ли, что строка для 'SetFocus' каким-то образом пропущена некоторой ошибкой в ​​коде? Что произойдет, если вы выберете точку останова на этой строке, а затем продолжите шаг за шагом? –

+0

Линия не пропускается. Я запустил код шаг за шагом, а функция 'SetFocus' функционировала, но после' End Sub' поле «Password» выбрано. – franciscofcosta

ответ

1

вы могли бы действовать, как следует:

в вашем UserForm код панели:

  • объявить UserForm область видимости переменной

    Dim reset As Boolean 
    
  • вставить этот Sub

    Private Sub HandleReset() 
        If reset Then 
         Me.usernameinput.SetFocus 
         reset = False 
        End If 
    End Sub 
    
  • добавить все остальные элементы управления UserForm Enter обработчик событий для вызова HandleReset() нравится следующим образом:

    Private Sub passwordconfirm_Enter() 
        HandleReset 
    End Sub 
    
    Private Sub passwordinput_Enter() 
        HandleReset 
    End Sub 
    
+0

Я собираюсь попробовать это. Спасибо. – franciscofcosta

+0

добро пожаловать. дайте мне знать – user3598756

+0

@franciscofcosta, вы прошли через это? – user3598756

Смежные вопросы