combobox中的VBA自动填充文本

我正在创build一个comboboxsearch工作表使用工作表名称自动完成function,我可以得到的下拉列表中的工作簿的工作表的名称,但是当我input工作表名称的几个字母,我想显示的build议所有的表格中都有我写在combobox中的字母。

下面是到现在为止所做的代码,我可以select表单名称并将其添加到表单中。

第一个 – 添加一个combobox到第一个工作表并命名(我称之为cmbSheet)。 我使用了ActiveXcombobox(在Excel 2007中,在“开发人员”选项卡下)。

第二 – 打开VBA,并将下面的代码添加到工作簿代码。 每次打开工作簿时,此代码将使用工作表名称填充combobox。

Private Sub Workbook_Open() Dim oSheet As Excel.Worksheet Dim oCmbBox As MSForms.ComboBox Set oCmbBox = ActiveWorkbook.Sheets(1).cmbSheet oCmbBox.Clear For Each oSheet In ActiveWorkbook.Sheets oCmbBox.AddItem oSheet.Name Next oSheet End Sub 

第三 – 现在,我去了我的第一个工作表的代码(已添加combobox),并添加将激活combobox中select的工作表的代码。 代码是:

 Private Sub cmbSheet_Change() ActiveWorkbook.Sheets(cmbSheet.Value).Activate End Sub 

现在,当combobox值改变时,相应的纸张被激活。

该解决scheme解决了部分问题:dynamic更改表名的问题。

将combobox填充过程移到它自己的方法中。 然后从Workbook_Open子部分调用该方法。 每次使用VBA过程来更改工作表名称时,将Call RefreshList行添加到该过程的末尾。

  Private Sub Workbook_Open() Call RefreshList End Sub Private Sub RefreshList() Dim oSheet As Excel.Worksheet Dim oCmbBox As MSForms.ComboBox Set oCmbBox = ActiveWorkbook.Sheets(1).cmbSheet oCmbBox.Clear For Each oSheet In ActiveWorkbook.Sheets oCmbBox.AddItem oSheet.Name Next oSheet End Sub Private Sub DynamicallyChangeSheetNames() 'Do stuff, change a sheet name Call RefreshList End Sub 

要处理某人手动重命名工作表,请查看https://stackoverflow.com/a/1941199/5103770以及http://www.cpearson.com/excel/RenameProblems.aspx

Interesting Posts