在VBA中将变量传递给sub

时间:2013-04-25 14:31:21

标签: excel vba variables parameter-passing

这可能是非常基本的,但我已经尝试了很多东西而且总是给出错误。

基本上我要做的是每次在Excel中更改单元格时运行一个过程。所以我使用Sub Worksheet_Change(ByVal Target As Range)。 一切都运作良好,但在这个程序中,我多次调用另一个子程序。

我想在此过程中重用'Target'值,但由于某种原因,我找不到如何做到这一点。我尝试将'Public rTarget As Range'放在程序开头并执行'rTarget = Target'。但是当我调用子程序时,rTarget保持为空。

如何使这项工作? 我现在将Target作为变量之一添加到子程序中,但这看起来很愚蠢。

谢谢!

2 个答案:

答案 0 :(得分:2)

Private Sub Worksheet_Change(ByVal Target As Range)
    MySub Target
End Sub

Sub MySub(ByVal Target As Range)
    ' Your sub code goes here and can work with the Target Range from the Worksheet_Change Event
End Sub

答案 1 :(得分:0)

将Target作为变量传递是你应该如何做到的。您希望将变量保持在最严格的范围内,并将它们作为参数传递是最严格的。

如果您将变量传递给同一模块中的一堆不同过程,则拥有模块级变量可能是有意义的。看起来像这样

Private mrTarget As Range


Private Sub Worksheet_Change(ByVal Target As Range)

    Set mrTarget = Target
    MySub

End Sub

Private Sub MySub()

    Debug.Print mrTarget.Address

End Sub

根据您的问题,它只是一个被重复调用的子。在这种情况下,我会坚持将其作为一个论点。