如何在表名更改时dynamic更改代码?

我正在尝试编写一个macros,将不同工作簿中定义的工作表组合起来并保存到一个单独的工作簿中。 每个工作簿都包含一个具有相同名称MODEL工作表。 此工作表有一个combobox,此combobox与工作表名称相关联,如下面的代码所示:

 Sub ComboBox1_Change() Application.ScreenUpdating = False Select Case Sheets("MODEL").Range("code_plant") Case 1 Sheets("MODEL").Range("price_zero").Copy _ Destination:=Sheets("MODEL").Range("price_on_view") End Select Application.ScreenUpdating = True End Sub 

当所有工作表在一个工作簿中组合在一起并重新命名时,就会出现问题。 我需要修复我应该重命名后的combobox引用当前(重命名)工作表名称。 我试图使用下面的函数,但无法弄清楚它是如何包含在我的代码中正确的方式。

 Function MySheet() Application.Volatile MySheet = Application.Caller.Worksheet.CodeName End Function 

谢谢!

您的ComboBox1_Change事件是在工作表模块中声明的,所以您应该在代码中使用Me关键字来引用表单,而不是使用Sheets("MODEL")按名称查找表单。

将每个源表中的事件处理程序更改为如下所示:

 Sub ComboBox1_Change() Application.ScreenUpdating = False Select Case Me.Range("code_plant") Case 1 Me.Range("price_zero").Copy _ Destination:=Me.Range("price_on_view") End Select Application.ScreenUpdating = True End Sub 

由于您的combobox位于同一张工作表中,因此不需要指定工作表名称或使用其他任何方法来限定工作表名称。 范围将指向Activesheet其中ComboBox1驻留 )是Sheets("MODEL")或任何新的名称。

 Sub ComboBox1_Change() Application.ScreenUpdating = False Select Case Range("code_plant") Case 1: Range("price_zero").Copy Range("price_on_view") End Select Application.ScreenUpdating = True End Sub