是否可以设置我的Excel用户窗体combobox来开始缩小字段,而数据input?

VBA新手在这里。 我已经search了这个答案的高低,甚至遇到了类似于我的其他问题,但无法得到答案。 所以我希望这是我的幸运日。 我有一个用户窗体在Excel中有四个combobox。 每个combobox都有一个下拉select。 在其中的两个框中,有许多商业名称,这些名称很多都是相似的。 我想要把数据input框中的function,它将开始缩小选项。 例如:如果我input“加热和空气”,它开始只显示列表中包含该词或短语的项目。 这是一个属性改变的框,或者写的代码,或者其他的东西? 请帮忙,我被困住了,似乎没有人有答案。

非常感谢 – Excel新手

是的,这是非常可能的。 所有你需要做的是创build一个子组件,填充combobox,设置它,以便在添加时检查框的值,例如,如果它是基本的键入示例。 基本格式。 这假定可能的值存储在一个数组中。 这将添加任何具有在其中input的string的项目。 (在任何位置)

 For I = 0 to Number of Values If instr(Value(I), ComboBox.Text) > 0 then add item endif next 

我玩了一下,想出了一些让你开始的东西。 这基本上起着“自动search”的作用。 它不是自动完成的,因为它将search整个术语,而不仅仅是以你input的任何词开始。基本上,我假设你有一个单元格范围(在这个例子中的单元格A2:A121 )有你的下拉date在里面。

build立

添加一个新的通用模块(我命名我的GlobalVars并添加下面的代码:

 Option Explicit Public IgnoreChange As Boolean Public RangeOfData As Variant 

代码

打开代码到您的用户窗体。

添加下面的代码:

 Private Sub UserForm_Initialize() RangeOfData = Application.WorksheetFunction.Transpose(Sheet1.Range("A2:A121").Value) IgnoreChange = False End Sub 

一定要更新A2:A121Sheet1 (我使用的代码名称,但Worksheets("Sheet1")将工作以及)指向包含您的comboboxselect的数据。

现在,工作的肉在Combobox_Change事件中处理

 Private Sub ComboBox1_Change() If Me.ComboBox1.Text = vbNullString Then Me.ComboBox1.Clear SendKeys ("{Enter}") End If If Me.ComboBox1.TextLength > 2 Then Dim i As Long, j As Long If IgnoreChange = False Then Me.ComboBox1.Clear SendKeys ("{Enter}") DoEvents 'Bug with NumLock For i = LBound(RangeOfData) To UBound(RangeOfData) If UCase(RangeOfData(i)) Like "*" & UCase(Me.ComboBox1.Text) & "*" Then Me.ComboBox1.AddItem RangeOfData(i) End If Next i Me.ComboBox1.DropDown End If End If IgnoreChange = False End Sub 

确保将ComboBox1更改为您的combobox控件的名称。

基本上,它处理用户input时,它会达到两个字符或更长。 代码将search您的input数据范围,然后返回与用户inputstring相匹配的结果。 结果就像一个build议框。

我应该注意,用这种方法,combobox没有预先填充数据,所以用户必须开始在combobox中input内容。

另外,我添加了下面的代码来处理退格键:

 Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 8 Then IgnoreChange = True End If End Sub 

再次确保根据情况更改ComboBox1

对于我的例子,我将所有120蜡笔蜡笔颜色加载到电子表格(这是从A2:A121 Sheet1中)。

这里是当我开始input时的输出示例,首先我inputblu在这里输入图像说明

正如您所看到的,我正在获取包含blu所有值,包括那些不以blu开始的值,例如Cadet Blue或Midnight blue。

又如,我会寻找flower

在这里输入图像说明

因此,正如你所看到的,它不是一个有120个静态选项的combobox,而是根据用户input的内容进行更新,并与你的单元格中的值列表绑定。

我注意到SendKeys有时会切换我的NumLock,这是一个已知的问题。 该行的要点是在用户删除所有文本或继续发短信以便“刷新”自动生成的列表之后折叠下拉菜单。