我目前有一个具有组合框和列表框的用户表单。两者都包含相同的项目列表(组合框具有额外的空值)。如果用户选择组合框中的项目,则将在列表框中选择相同的项目。
当用户尝试键入值而不是从组合框中选择一个值时,我遇到的问题是来自组合框自动完成。当用户键入值时,它将自动完成键入组合框中值的内容。 (如果我输入“8”,则组合框将自动完成“8184123”。)
如果我将MatchEntry设置为2 - fmMatchEntryNone,则组合框不会自动完成。但是,组合框不会根据用户键入的内容选择值。
有没有办法阻止组合框自动完成,同时让MatchEntry保持在1 - fmMatchEntryComplete?或者,只有当用户输入的值完全等于组合框列表中的值时才能实现fmMatchEntryComplete?
答案 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
实际上有MatchRequired
和MatchEntry
处理,即使fmMatchEntryNone
设置为CheckCB()
然后你必须调用click
函数以防止在你的组合框输入有效值之前离开userform
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