在Excel中,如何设置VBA ComboBox,以便在复制工作表时仍能正常工作?

在Excel 2010中,我可以在工作表中创build一个ActiveXcombobox,并将其configuration为给我一个所有工作表的列表,并且它将激活我select的工作表。

但是,如果我复制包含ComboBox的工作表,新的ComboBox已经死了。 我必须复制所有使其工作的VBA代码,相应地更改标签。

有什么办法可以设置它,以便它可以自动工作,如果我复制工作表?

这就是我目前的做法:

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

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