Excel VBA UserForm TextBox не распознает выход - PullRequest
0 голосов
/ 05 ноября 2019

Надеюсь, это просто для кого-то там. У меня есть пользовательская форма Excel VBA с несколькими текстовыми полями для ввода параметров. Кроме того, есть изображение на пользовательской форме. Когда пользователь щелкает текстовое поле, изображение в пользовательской форме изменяется, вызывая событие _Enter () для отображения изображения соответствующего параметра. Это работает нормально и не является проблемой. Однако, когда пользователь выходит из текстового поля, я хочу, чтобы изображение вернулось к исходному изображению. Я попытался события для _Exit () и _AfterUpdate (), чтобы сделать эту работу, и хотя он работает нормально, если я обновляю параметр, он не работает, если я не обновляю параметр. По сути, изображение изменяется при вводе текстового поля, но не изменяется при выходе, если я не обновляю значение в текстовом поле.

У кого-нибудь есть идеи, почему это так и чем я могу бытьВ состоянии сделать с этим?

Обновление (с кодом по запросу). Теперь я выяснил, что событие Exit текстового поля не вызывается, потому что у меня есть более одного фрейма в пользовательской форме, и я нажимаю на элемент управления в другом фрейме. Я сделал следующий пример. Simple UserForm with Two Frames

и следующий код;

Option Explicit
Dim TextBox1Data As Variant, TextBox2Data As Variant
Private Sub TextBox1_AfterUpdate()
    TextBox1Data = TextBox1.Value
    Debug.Print "AfterUpdate Textbox 1"
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Debug.Print "Exit Textbox 1"
End Sub
Private Sub TextBox2_AfterUpdate()
    TextBox2Data = TextBox2.Value
    Debug.Print "AfterUpdate Textbox 2"
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Debug.Print "Exit Textbox 2"
End Sub
Private Sub UserForm_Initialize()
    ComboBox1.List = Array("Item 1", "Item 2", "Item 3", "Item 4")
    ComboBox1.Text = ComboBox1.List(1)
End Sub

Если я щелкаю в TextBox1 и затем щелкаю либо в ComboBox1, либо в CheckBox1, вызывается событие Exit для TextBox1,Однако, если я щелкаю в TextBox1, а затем щелкаю либо в CheckBox2, либо в CheckBox3, событие не инициируется. Я предполагаю, что это потому, что флажки находятся в другом кадре. Это тот случай? Есть ли способ вызвать событие Exit для TextBox при переходе от одного кадра к другому?

1 Ответ

0 голосов
/ 06 ноября 2019

Кажется, это известная проблема - см. Microsoft Q210734 . Вместо того, чтобы использовать метод Set Focus, предложенный MS, я теперь добавил Событие для выхода из Фрейма, где расположены текстовые поля, например, используя мой пример кода, я добавил следующее:

Private Sub Frame1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Debug.Print "Exiting Frame"
End Sub

Что происходиттеперь при переходе от одного элемента управления к другому в Frame1 нормальное событие Exit для элемента управления работает, как и ожидалось, а при переходе от Frame1 к Frame2 событие Exit для кадра работает.

Надеюсь, что это поможет кому-то вто же самое затруднительное положение.

...