2013-04-25 125 views
0

這可能是非常基本的,但我已經嘗試了很多東西,總是給出錯誤。將變量傳遞給VBA中的子

基本上我想要做的是每次在Excel中更改單元時運行一個過程。所以我使用Sub Worksheet_Change(ByVal Target As Range)。 一切正常,但在此過程中,我正在多次調用另一個子過程。

我想在此過程中重複使用「目標」值,但出於某種原因,我找不到如何操作。我嘗試在程序開始時放置'Public rTarget As Range'並執行'rTarget = Target'。但是當我調用子程序時,rTarget保持空白。

我該如何做這項工作? 我現在將Target作爲變量之一添加到子例程中,但這看起來很愚蠢。

謝謝!

回答

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

謝謝,這就是我現在正在做的。但是,每次我打電話給'MySub'時,我必須添加'Target'。 沒有辦法不這樣做嗎? – user2320210 2013-04-26 06:30:44

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 

根據你的問題,這只是一個被重複調用的子。在這種情況下,我會堅持把它作爲一個論點。

+0

我知道我必須儘可能地保持變量。但是我運行的代碼非常小,並且它使得它看起來更整潔,而無需將Target添加爲參數。 我使用的是與您相同的代碼,但在將Target複製到mrTarget時忘了使用'Set'... 現在就像一個魅力一樣! 謝謝! – user2320210 2013-04-26 13:53:13