在Excel中,如何设置VBA组合框,使其在复制工作表时仍能工作



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

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

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

这就是我目前的做法:

Microsoft Excel对象\本工作簿:

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 Objects\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

现在,即使在复制工作表之后,每个组合框的代码也应该能够正常工作。

相关内容

最新更新