组合框中的VBA自动完成文本

时间:2015-12-17 11:56:58

标签: excel vba excel-vba combobox autocomplete

我正在使用带有自动填充功能的工作表名称创建一个用于搜索工作表的组合框,我能够在下拉列表中获取工作簿工作表的名称,但是当我输入工作表的几个字母表时,我想要显示我在组合框中写的字母表所有表格的建议。

以下是迄今为止完成的代码,通过该代码,我可以选择工作表名称并对该工作表进行操作。

1st - 将组合框添加到第一张工作表中并命名(我称之为cmbSheet)。我使用了ActiveX Combobox(在Excel 2007中,在Developer选项卡下)。

2nd - 打开VBA并将以下代码添加到工作簿代码中。每次打开工作簿时,此代码都会使用工作表名称填充组合框。

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

第3次 - 现在,我转到了我的第一张纸的代码(添加了组合框),并添加了激活组合框中所选纸张的代码。代码是:

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

现在,当组合框值发生变化时,相应的工作表将被激活。

1 个答案:

答案 0 :(得分:1)

此解决方案解决了部分问题:动态更改工作表名称的问题。

将组合框填充程序移动到自己的方法中。然后从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