Excel VBA组合框不允许从列表中选择特定项

Excel VBA组合框不允许从列表中选择特定项,vba,excel,combobox,Vba,Excel,Combobox,我的工作表中有一个带有动态搜索的组合框,动态搜索是通过在另一个工作表的列表中搜索键入的字母来完成的。通过excel公式进行搜索。列表是一个定义的范围,然后组合框listfillrange被设置为命名范围。 当我输入时,下拉列表打开,对于某些项目,组合框允许我从列表中选择,对于其他项目,选择将随着我的选择而消失。我试图弄明白为什么这些东西消失了。这个列表有10000个条目,所以它的运行速度有点慢,但我不确定这是否是问题所在 我怎样才能解决这样的问题?有没有办法为下拉列表中的鼠标单击选择定义变量 提

我的工作表中有一个带有动态搜索的组合框,动态搜索是通过在另一个工作表的列表中搜索键入的字母来完成的。通过excel公式进行搜索。列表是一个定义的范围,然后组合框listfillrange被设置为命名范围。 当我输入时,下拉列表打开,对于某些项目,组合框允许我从列表中选择,对于其他项目,选择将随着我的选择而消失。我试图弄明白为什么这些东西消失了。这个列表有10000个条目,所以它的运行速度有点慢,但我不确定这是否是问题所在

我怎样才能解决这样的问题?有没有办法为下拉列表中的鼠标单击选择定义变量

提前感谢,, 大理

这是我的代码:

Private Sub ComboBox1_Change()
    Sheets("PS").EnableCalculation = True
    ComboBox1.ListFillRange = "DropDownList"
    ComboBox1.DropDown

End Sub

Private Sub CommandButton21_Click()
    Dim PS As Worksheet
    Application.ScreenUpdating = False
    Application.ErrorCheckingOptions.BackgroundChecking = False
    Sheets("PharmaSoft").Select
    Set PS = Sheets("PS")
    SelectionA = PS.Range("J2").Value
   If ComboBox1.Value = SelectionA Then
    Range("J19") = "Pharmacy purchase price"
    Range("N19") = PS.Range("K2")
    Range("O19") = "ILS"
    Range("J21") = "Pharmacy selling price Incl.VAT"
    Range("N21") = PS.Range("L2")
    Range("O21") = "ILS"
    Range("J23") = "Package size"
    Range("N23") = PS.Range("M2")
    Range("J19:O23").Select
    With Selection.Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
        End With
        Selection.Font.Bold = True
        Application.ScreenUpdating = True
        Range("N19").Errors.Item(1).Ignore = True
        Range("N21").Errors.Item(1).Ignore = True
        Range("N23").Errors.Item(1).Ignore = True
   Else
     MsgBox "Please select a product", vbCritical, "Error"
   End If
   Sheets("PS").EnableCalculation = False
End Sub

Private Sub CommandButton22_Click()
    Application.ScreenUpdating = False
    Sheets("PharmaSoft").Select
    ComboBox1.Value = Null
    Range("J19:O23").Value = Null
    Application.ScreenUpdating = True
End Sub

Also the code for the workbook:

Private Sub Workbook_Open()
    Sheets("PharmaSoft").Select
    Application.ScreenUpdating = False
    Sheets("PharmaSoft").ComboBox1.Value = Null
    Range("J19:O23").Value = Null
    Application.ScreenUpdating = True
End Sub

尽管我不能评论你在做什么,因为你的搜索已经完成了,就像你提到的excel公式一样。我知道通过组合框使用数据验证非常快。我使用的方法就是这样,速度非常快。它在大约15k行长的验证范围内几乎是瞬时的。它最大的优点是它提供了自动完成功能。因此,当您在组合框中键入该值而该值不在列表中时,与一个字符之前匹配的条目将消失。这是一个很好的视觉提示,无论您的选择是否有效。当然,你仍然可以用通常的方式使用下拉框。唯一不好的一面是,按照提供的链接中的代码,您必须双击以进入自动完成模式。

尽管我无法对您的操作进行评论,因为您的搜索是按照您提到的excel公式进行的。我知道通过组合框使用数据验证非常快。我使用的方法就是这样,速度非常快。它在大约15k行长的验证范围内几乎是瞬时的。它最大的优点是它提供了自动完成功能。因此,当您在组合框中键入该值而该值不在列表中时,与一个字符之前匹配的条目将消失。这是一个很好的视觉提示,无论您的选择是否有效。当然,你仍然可以用通常的方式使用下拉框。唯一的缺点是,按照提供的链接中的代码,您必须双击才能进入自动完成模式。

请添加一些数据示例或屏幕截图以及您的代码。那么您使用的控件类型和代码在哪里?我的意思是:ComboBox1和所有按钮是ActiveX控件还是窗体控件?PS是放置ComboBox1的工作表的名称吗?PS工作表属于哪个工作簿?按钮放在哪些工作表中?打开的工作簿属于哪个工作簿?我只使用ActiveX控件,不使用表单。代码在一个名为Pharmasoft的工作表中,我在其中显示了一种google搜索字段,其中有一个按钮用于搜索和清除数据。PS是项目列表的位置,也是计算组合框列表的位置。打开的工作簿是为整个工作簿定义的。那么,另一个工作表是什么?请添加一些数据示例或屏幕截图以及您的代码。那么您使用的控件类型和代码在哪里?我的意思是:ComboBox1和所有按钮是ActiveX控件还是窗体控件?PS是放置ComboBox1的工作表的名称吗?PS工作表属于哪个工作簿?按钮放在哪些工作表中?打开的工作簿属于哪个工作簿?我只使用ActiveX控件,不使用表单。代码在一个名为Pharmasoft的工作表中,我在其中显示了一种google搜索字段,其中有一个按钮用于搜索和清除数据。PS是项目列表的位置,也是计算组合框列表的位置。打开的工作簿是为整个工作簿定义的。那么另一个工作表是什么?谢谢,但我使用的是可搜索字段,而不是自动完成。如果像Tom skuller和Tom Blum这样的特定作品有两个选项,我希望在键入Tom时两个选项都有。问题是,我在列表中看到两个名称,但我可以选择一个名称,但无法选择另一个名称。不知道这是否是错误的来源,但在更改ListValueRange时,您应该这样做:“ComboBox1.ListFillRange==DropDownList。”。您是否正在更改“DropDownList”?谢谢,但我使用的是可搜索字段,而不是自动完成。如果像Tom skuller和Tom Blum这样的特定作品有两个选项,我希望在键入Tom时两个选项都有。问题是,我在列表中看到两个名称,但我可以选择一个名称,但无法选择另一个名称。不知道这是否是错误的来源,但在更改ListValueRange时,您应该这样做:“ComboBox1.ListFillRange==DropDownList。”。您正在更改“下拉列表”吗?