更改工作表名称时如何动态更改代码?

时间:2017-11-25 10:34:32

标签: excel vba excel-vba

我试图编写一个宏,它结合了来自不同工作簿的已定义工作表,并将它们保存到单独的工作簿中。每个工作簿都包含一个名称为MODEL的工作表。此工作表有一个组合框,这个组合框与工作表名称相关联,如下面的代码所示:

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

当所有工作表在一个工作簿中组合在一起并重命名时,就会出现问题。我需要修复我的组合框宏,应该在重命名后引用当前(重命名的)工作表名称。我试图使用以下功能,但无法确定如何以正确的方式包含在我的代码中。

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

谢谢!

2 个答案:

答案 0 :(得分:2)

您的ComboBox1_Change事件已在工作表模块中声明,因此您应该在代码中使用Me关键字来引用工作表,而不是使用{{1}按名称查找工作表}}

在每个源表中更改事件处理程序,如下所示:

Sheets("MODEL")

答案 1 :(得分:1)

由于您的组合框位于同一张纸中,因此您无需指定工作表名称或使用其他任何内容来限定它。范围将指向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