如何将目标传递给Excel事件中的另一个宏?

时间:2014-12-17 10:26:02

标签: excel vba events

如何将目标传递给Excel事件中的另一个宏?为了优雅的目的,我想使用以下结构,现在不起作用。

Private Sub Worksheet_Change(ByVal Target As Range) GoToAnotherMacro(Target) End Sub
Sub GoToAnotherMacro(Target) 'here my code where I can use Target i.e: MsgBox "value: " & Target.Value End Sub

1 个答案:

答案 0 :(得分:2)

我建议使用全局变量:

1)定义一个全局变量:

Dim RangeSupp As Range

2)在您的过程中,将本地Target传递给您的全局变量

Private Sub Worksheet_Change(ByVal Target As Range)
    Set RangeSupp = Target
    GoToAnotherMacro RangeSupp
End Sub

3)在其他宏中享受你的目标

Sub GoToAnotherMacro(Target As Range)
MsgBox Target.Value
End Sub

注意:全局变量放在所有代码之上,外部任何其他函数或Sub。即使在宏的单个范围之外,全局变量也保留在堆栈中。这就是为什么你能够将一个全局变量从宏传递到另一个的原因。另一方面,现在你无法(你得到"对象必需的错误"),因为Target对象一旦超出Worksheet_Change的范围,就会从堆栈,使其恢复到默认值(Nothing),导致上述代码中出现问题。