Клавиша табуляции VBA помещает фактическое значение табуляции в текстовое поле вместо перехода к следующему элементу управления - PullRequest
7 голосов
/ 26 апреля 2010

У меня есть форма VBA (в Excel, если это имеет значение), которая содержит текстовые поля.

Трижды я обнаруживал, что нажимаю клавишу табуляции, чтобы перейти к следующему элементу управления, но вместо этого в текстовое поле вставляется фактическая вкладка.

Форма обычно действует так, как должна, но меня беспокоит то, что этот гремлин появляется время от времени.

Он обнаружился в Office 2003, а также в Office 2007 на двух разных компьютерах.

Кто-нибудь еще сталкивался с этой проблемой и, если да, как вы ее исправили?

Ответы [ 5 ]

3 голосов
/ 25 января 2012

Мне удалось воспроизвести проблему в 100% случаев, запустив Excel, сразу же открыв форму и удерживая клавишу табуляции.

Если я вообще изменю какой-либо код в форме и сохраню книгу, проблема исчезнет. Я собираюсь объяснить это ошибкой компиляции по счастливой случайности в VBA.

1 голос
/ 17 июля 2012

В качестве быстрого обходного пути используйте этот код в событии Exit элемента управления.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox1.Text = VBA.Replace(TextBox1.Text, VBA.Chr(9), "")
End Sub
1 голос
/ 23 января 2012

Я создал форму с тремя текстовыми полями. Я ввел символы и некоторое время вкладывал их в следующую, не имея возможности дублировать вашу проблему.

Единственный способ получить вкладку в текстовое поле - это нажать Ctrl + Tab. Это может быть неловко, но backspace удаляет его, так что это не главная проблема. Возможно ли одновременное нажатие клавиши Ctrl?

Иногда я нахожу, что, если я неправильно нажму клавишу, курсор переместится в другое место на экране. Я не совсем уверен, что я имею в виду под «неправильным давлением»; кажется, что-то связано с одновременным нажатием двух клавиш. Кажется, это особенность современных клавиатур и того, как они определяют, какая клавиша была нажата, потому что я встречал ее на многих разных компьютерах. Подразумевается, что при неправильном нажатии клавиши генерируется управляющий символ (возможно, tab или ctrl + tab).

Я также попробовал следующее, что сработало и скрывает проблему, удалив вкладку и перейдя к следующему элементу управления.

Private Sub TextBox1_Change()

  If InStr(1, TextBox1.Text, Chr(9)) <> 0 Then
    TextBox1.Text = Replace(TextBox1.Text, Chr(9), "")
    TextBox2.SetFocus
  End If

End Sub
0 голосов
/ 04 октября 2013

Это может решить проблему:

Public Sub MoveFocusToNextControl(xfrmFormName As UserForm, _
xctlCurrentControl As control)

Dim xctl As control
Dim lngTab As Long, lngNewTab As Long

On Error Resume Next

' Move focus to the next control in the tab order
lngTab = xctlCurrentControl.TabIndex + 1
    For Each xctl In xfrmFormName.Controls
        lngNewTab = xctl.TabIndex
        ' An error will occur if the control does not have a TabIndex property;
        ' skip over those controls.
        If Err.Number = 0 Then
            If lngNewTab = lngTab Then
                xctl.SetFocus
                Exit For
            End If
        Else
            Err.Clear
        End If
    Next xctl
Set xctl = Nothing
Err.Clear
End Sub
0 голосов
/ 26 апреля 2010

Установите для свойства TabKeyBehavior значение False, чтобы получить поведение "Tab перейдет к следующему полю".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...