【问题标题】:VBA Get Combobox to 'suggest' an optionVBA 获取组合框以“建议”一个选项
【发布时间】:2013-12-29 20:38:09
【问题描述】:

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

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

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

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

欢迎任何想法、建议或替代方法。

提前致谢,

【问题讨论】:

    标签: excel autocomplete combobox vba


    【解决方案1】:

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

    1. MatchEntry --> 1 - fmMatchEntryComplete
    2. MatchRequired --> 是的

    因此,当用户尝试选择列表之外的单词时,他们会得到“无效的属性值”。

    【讨论】:

      【解决方案2】:

      此代码采用您所描述的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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-07
        • 2013-01-10
        相关资源
        最近更新 更多