VBA让Combobox“建议”一个选项

时间:2013-12-29 20:38:10

标签: excel-vba autocomplete combobox vba excel

我对VBA比较陌生,我正在尝试解决在Excel 2010中使用userform的问题。

我正在编写一个伪拼写检查器来验证列表中的单词。未知单词显示在文本框中,允许单词列表位于下面的组合框中。我希望组合框能够根据未知单词显示“建议”。即,未知单词是“挖掘”,组合框中允许的单词之一是“挖掘”。我希望组合框能够建议“挖掘”一词。我的问题是自动完成不提供建议,因为未知单词比允许的单词长。

我解决问题的想法是做以下事情: - 将未知单词解析为字符数组。 - 将一个字符一次添加到组合框文本属性,并允许自动完成运行。 - 一旦自动完成停止工作,删除一个字符并插入自动完成建议的单词。

我的问题是,一旦自动完成停止工作,我找不到任何要告诉我的信息。

欢迎任何想法,建议或其他方法。

提前致谢,

威尔

2 个答案:

答案 0 :(得分:3)

您可能希望更改ComboBox的2个属性以强制选择列表中的条目:

  1. MatchEntry - > 1 - fmMatchEntryComplete
  2. MatchRequired - >真
  3. 因此,当用户尝试选择列表之外的单词时,他们会收到“无效的属性值”。

    ComboBox Properties enter image description here

答案 1 :(得分:1)

此代码假定您所描述的TextBoxComboBox,仍然使用其默认名称。此外还有一个按钮,按下时会提示您输入一个单词。然后将这个单词粘贴到文本框中,我认为它会复制您编码的行为:

Private Sub UserForm_Activate()
With Me.ComboBox1
    .AddItem "bat"
    .AddItem "battleship"
    .AddItem "battle"
    .AddItem "batty"
    .AddItem "bathhouse"
End With
End Sub

Private Sub CommandButton1_Click()
Me.TextBox1 = Application.InputBox("Word", , , , , , , 2)

End Sub

Private Sub TextBox1_Change()
Dim WordToMatch As String
Dim AvailableWords() As String
Dim i As Long
Dim MatchedWordPosition As Long
Dim LongestWordLength As Long

With Me.ComboBox1
    .ListIndex = -1
    WordToMatch = Me.TextBox1.Text
    ReDim AvailableWords(0 To .ListCount - 1)
    For i = LBound(AvailableWords) To UBound(AvailableWords)
        AvailableWords(i) = .List(i)
        LongestWordLength = WorksheetFunction.Max(Len(.List(i)), LongestWordLength)
    Next i
    For i = 0 To Len(WordToMatch) - 1
        On Error Resume Next
        MatchedWordPosition = WorksheetFunction.Match(WordToMatch & WorksheetFunction.Rept("?", (LongestWordLength - Len(WordToMatch)) - i), AvailableWords(), 0)
        If MatchedWordPosition > 0 Then
            Exit For
        End If
    Next i
    If MatchedWordPosition > 0 Then
        .ListIndex = MatchedWordPosition - 1
    End If
End With
End Sub

我想有几种方法可以给这只猫上皮,但这是我的最大努力。