gpt4 book ai didi

excel - ComboBox.MatchEntry 属性如何具有 `fmMatchEntryComplete` 值但能够覆盖自动完成功能?

转载 作者:行者123 更新时间:2023-12-03 02:20:29 25 4
gpt4 key购买 nike

我的问题是,我将一个列表框植入到组合框中,并使用 ComboBox.List = MyArr 作为框中的列表数据。我希望它的工作方式与您在其他应用程序中看到的大多数用户表单类似,其中在组合框中键入将显示与用户输入相关的最佳匹配,但当按下键盘上的退格按钮时删除自动完成功能。

当我尝试仅输入文本的缩短版本时出现问题。例如,预定义列表包含单词“SUNNIES”,但我想输入“SUN”。无论我做什么,组合框总是会自动完成为“SUNNIES”。但我也不想删除自动完成功能。

下面是我的表单示例: enter image description here

最佳答案

我认为有一种解决方法可以使用 _KeyDown 事件实现您想要的行为。

您可以使用以下方法更改 ComboBox1 的行为:

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Me.ComboBox1.SelLength > 0 And KeyCode = 8 Then
KeyCode = 46
End If
End Sub

它会检查是否有选定的文本,以及是否按下了退格键KeyCode = 8,如果是,则将其更改为删除KeyCode = 46。如果没有选择任何内容,它将照常退格。

<小时/>

如果您想将其应用于用户表单中的所有组合框......

...执行以下操作,而不是上面的 _KeyDown 事件。

  1. 添加一个类模块并将其命名为 CmbClass,代码如下:

    Option Explicit

    Public WithEvents ComboBoxGroup As MSForms.ComboBox

    Private Sub ComboBoxGroup_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If ComboBoxGroup.SelLength > 0 And KeyCode = 8 Then
    KeyCode = 46
    End If
    End Sub
  2. 将以下代码添加到您想要应用该行为的每个用户窗体:

    Option Explicit

    Dim ComboBoxes() As New cmbClass

    Private Sub UserForm_Initialize()
    Dim ComboBoxCount As Integer
    Dim ctl As Control
    ComboBoxCount = 0
    For Each ctl In Me.Controls
    If TypeName(ctl) = "ComboBox" Then
    ComboBoxCount = ComboBoxCount + 1
    ReDim Preserve ComboBoxes(1 To ComboBoxCount)
    Set ComboBoxes(ComboBoxCount).ComboBoxGroup = ctl
    End If
    Next ctl
    End Sub

关于excel - ComboBox.MatchEntry 属性如何具有 `fmMatchEntryComplete` 值但能够覆盖自动完成功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53496375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com