2017-11-25 202 views
2

我正在尝试编写一个宏,它将不同工作簿中定义的工作表组合起来,并将它们保存到一个单独的工作簿中。每个工作簿都包含一个名称相同的工作表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 

谢谢!

+0

该代码位于持有组合框的工作表中。它会自动应用到正确的工作表,而不需要名称,否? – QHarr

+0

如果您想要包含组合框ComboBox1.Parent.Name – QHarr

回答

2

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 
+0

的工作表的名称就像一个魅力!感谢您的帮助 –

1

由于您的组合框是在同一张纸上,你不需要指定SHEETNAME或用别的来限定它。范围将指向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 
+0

通常'Range'指的是ActiveSheet,但是在工作表模块中,您是对的,它会调用工作表的Range属性。我只是把“我”放在前面,使其更加明确。 – ThunderFrame

+0

这就是我所提到的。一个不需要“明确”:) –