VBA Tab键将实际Tab值放入文本框而不是导航到下一个控件

时间:2010-04-26 14:51:52

标签: vba excel-vba excel

我有一个包含文本框的VBA表格(如果重要的话,在Excel中)。

有三次,我发现自己按Tab键导航到下一个控件,而是将一个实际的TAB放在文本框中。

这种形式通常会起到应有的作用,但我确实关注这种情况偶尔会出现。

它已在两台不同的计算机上显示在Office 2003和Office 2007上。

是否还有其他人遇到此问题,如果有,您是如何解决的?

6 个答案:

答案 0 :(得分:3)

我能够通过启动Excel,立即拉出表单并按住Tab键来100%重现问题。

如果我在表单中更改任何代码并重新保存工作簿,问题就会消失。我将在VBA中将这一点归结为侥幸编译错误。

答案 1 :(得分:1)

我创建了一个包含三个文本框的表单。我输入了字符并在下一个标签上标记了一段时间而不能复制你的问题。

我可以在文本框中输入标签的唯一方法是输入Ctrl + Tab。这可能会令人尴尬,但退​​格会将其删除,因此这不是一个主要问题。您是否可能意外同时按下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

答案 2 :(得分:1)

作为快速解决方法,请在控件的Exit事件中使用此代码。

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox1.Text = VBA.Replace(TextBox1.Text, VBA.Chr(9), "")
End Sub

答案 3 :(得分:1)

几年来,我同事的计算机中也出现这种情况,而我的工作正常。我已将所有 Checkboxes TabStop 属性设置为 False。现在似乎工作正常。

答案 4 :(得分:0)

TabKeyBehavior属性设置为False以使“标签跳转到下一个字段”行为。

答案 5 :(得分:0)

这可能会解决问题:

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