VBA:防止组合框中的自动完成

时间:2016-06-21 00:14:28

标签: vba excel-vba combobox excel

我目前有一个具有组合框和列表框的用户表单。两者都包含相同的项目列表(组合框具有额外的空值)。如果用户选择组合框中的项目,则将在列表框中选择相同的项目。

当用户尝试键入值而不是从组合框中选择一个值时,我遇到的问题是来自组合框自动完成。当用户键入值时,它将自动完成键入组合框中值的内容。 (如果我输入“8”,则组合框将自动完成“8184123”。)

如果我将MatchEntry设置为2 - fmMatchEntryNone,则组合框不会自动完成。但是,组合框不会根据用户键入的内容选择值。

有没有办法阻止组合框自动完成,同时让MatchEntry保持在1 - fmMatchEntryComplete?或者,只有当用户输入的值完全等于组合框列表中的值时才能实现fmMatchEntryComplete?

3 个答案:

答案 0 :(得分:1)

您可以让ComboBox方法和属性为您服务

以调用子位置的形式:

bindToController
在userform代码窗格中

放置此功能:

Sub main()

        ' code that preceeeds the userform loading...

       With UserForm1

           'other code to set some userform or userform controls properties...

           .ComboBox1.MatchEntry = fmMatchEntryNone ' <--| set this just before showing userform
           .Show
       End With

       Unload UserForm1

        ' code that follows the userform closing...


End Sub

尽管Function CheckCB(cboBox As MSForms.ComboBox) As Boolean With cboBox .Text = .Value '<-- This is the "trick": "refresh" the combobox text CheckCB = .MatchFound If Not CheckCB Then MsgBox "Invalid entry", vbCritical .SetFocus .SelStart = 0 .SelLength = Len(.Text) End If End With End Function .Value提醒MatchEntry实际上有MatchRequiredMatchEntry处理,即使fmMatchEntryNone设置为CheckCB()

然后你必须调用click函数以防止在你的组合框输入有效值之前离开userform

例如,你可以把它放在任何&#34;退出&#34;按钮Private Sub CommandButton1_Click() If Not CheckCB( ComboBox1 ) Then Exit Sub '<-- if ComboBox check failed then exit ' otherwise let code run ... End Sub 事件处理程序

If Not CheckCB Then Exit Sub

或者,如果您希望用户在组合框具有有效值之前不要输入任何其他控件,则必须对每个其他用户窗体控件事件处理程序采取类似操作,即将 if (wScroll > kontaktOffset - ($(window).height() / 1.05)) { $('.eboy').html('<div class="scrollme"> <div class="effect_box effect_box_translate animateme" data-translatey="500" data-translatex="-650" data-to="0.85" data-from="0.45" data-when="view" style="opacity: 1; transform: translate3d(0px, 0px, 0px) rotateX(0deg) rotateY(0deg) rotateZ(0deg) scale3d(1, 1, 1);"> <img src ="images/eboy.png" alt="" class="img-responsive center-block" width="auto" height="300" style="padding-top:50px"> </div> </div>'); } 置于其开头

答案 1 :(得分:0)

尝试使用{{1}}

答案 2 :(得分:0)

自定义自动填充

关闭匹配条目

  

ComboBox1.MatchEntry = fmMatchEntryNone

当用户键入迭代组合列表时。它只有一个可能的匹配,选择它。

Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Dim i As Integer, matchIndex As Integer
    matchIndex = -1
    For i = 0 To ComboBox1.ListCount - 1
        If InStr(1, ComboBox1.List(i), ComboBox1.Value) Then
            If matchIndex = -1 Then
                matchIndex = i
            Else
                Exit Sub
            End If
        End If
    Next
    If matchIndex > -1 Then ComboBox1.ListIndex = matchIndex
End Sub