vba - 在 Excel 中,如何设置 VBA ComboBox,以便在复制工作表时它仍然可以工作?

标签 vba excel excel-2010

在 Excel 2010 中,我可以在工作表中创建 ActiveX 组合框,并将其配置为提供所有工作表的列表,并且它将激活我选择的工作表。

但是,如果我复制包含组合框的工作表,新的组合框就会失效。我必须复制所有使其工作的 VBA 代码,并相应地更改标签。

有什么方法可以设置它,以便在复制工作表时它自动工作吗?

这就是我目前正在做的事情:

Microsoft Excel 对象\ThisWorkbook:

Private Sub Workbook_Open()

    ' Rebuild the list of sheets for the worksheet ComboBox.
    Dim i As Long
    For i = 1 To ThisWorkbook.Sheets.Count
        Sheet1.ComboBox1.AddItem Sheets(i).Name
        Next

End Sub

Microsoft Excel 对象\Sheet1(Sheet1):

Private Sub ComboBox1_Change()

    With Sheet1.ComboBox1
        Sheets(.List(.ListIndex)).Activate
    End With

End Sub

最佳答案

在您的工作簿模块中执行此操作:

Private Sub Workbook_Open()
    Call PopulateBoxes(Sheet1)
End Sub

在标准模块中,执行以下操作:

Sub PopulateBoxes(ws As Worksheet)

    Dim sht As Worksheet

    'Populate the combobox on sheet 1
    Dim obj
    Set obj = ws.OLEObjects.Item("ComboBox1").Object
    obj.Clear
    For Each sht In ThisWorkbook.Worksheets
        obj.AddItem sht.Name
    Next

End Sub

然后,在 Sheet1 模块中,进行以下操作:

Private Sub ComboBox1_Change()

    With Me.ComboBox1
        Sheets(.List(.ListIndex)).Activate
    End With

End Sub

Private Sub WOrksheet_Activate()
    Call PopulateBoxes(Me)
End Sub

现在,即使在复制工作表之后,每个 ComboBox 的代码也应该可以正常工作。

关于vba - 在 Excel 中,如何设置 VBA ComboBox,以便在复制工作表时它仍然可以工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34662565/

相关文章:

excel - 基于文本字段的 Excel 数据透视表中的条件格式

Excel VBA 错误取决于列的筛选方式

excel - 32 位 Excel 宏不适用于 64 位

python - 如何在Excel上按下按钮时执行Python脚本

excel - 编辑超链接 Excel 2010 宏

vba - 使用 VBA 循环遍历工作簿切片器名称

Excel VBA 用户窗体多页和框架(复制/粘贴)

excel - 访问 Excel 工作簿返回 "The resource could not be found."

vba - 在VBA中读取带有奇怪行分隔符的csv文件

excel - 如果包含特定值,则将值从一列复制到另一列