2014-01-28 57 views
-1

我試圖獲得對VBABYVAL在VBA事件

我知道這是很基本的,但在一些地面工作表事件,如更改

Private Sub Worksheet_Change(ByVal Target as Range) 
    Target.Font.ColorIndex = 5 
End Sub 

我已經搜查什麼BYVAL意味着this link

我不能幫助

走出一個意思了這種解釋指定的申辯這個被調用的過程或屬性不能改變調用代碼中參數的基礎變量的值。

巫婆真糊塗我...

我在不同的來源也搜尋,結果發現其陷入更深我在黑暗此不同的解釋......它去爲:

如果您不希望被調用的過程修改作爲參數傳遞的任何變量,則可以修改被調用過程的參數列表,以便參數通過值而不是通過引用傳遞給它。爲此,在ByVal關鍵字的參數前面。這種技術使被調用的例程與傳遞的變量數據的副本一起工作 - 而不是數據本身。

他的意思是「參數是通過值而不是參考值傳遞給它的」? 你能否以簡單的方式解釋我ByVal所做的事情,我經常在我編碼時使用它,並且我想知道我正在編寫的每一段代碼。

+0

-1有關ByVal和ByRef差異的問題已經有數千次被要求了。你還沒有完成你的功課(研究) – 2014-02-10 08:50:48

+0

對不起,這並不意味着浪費堆棧資源。很快我就能夠在VBA – ExoticBirdsMerchant

回答

2

這裏是一個例子一個非常好的網站,通過數值解釋之間的差異,並通過引用: http://www.physics.nyu.edu/grierlab/idl_html_help/procedures12.html 讓我知道這是否有助於! 如果沒有,我可以更深入地解釋它,但我認爲該網站充分涵蓋了該主題。

編輯:

價值意味着它被設置。您不能在另一個功能中再次調用此值。通過引用意味着可以再次調用該值。因此,在此示例中,PRO ADD,A,B A = A + B RETURN END

A通過引用傳遞,因爲用戶再次調用A並返回。但是,B被稱爲價值。在下面的例子中,ADD,A,4起作用。 A被定義爲A = A + B。因此用戶再次調用A並將B添加到它。但是,ADD,4,A不起作用,因爲4是一個值。所以4 = A + B會產生錯誤。當然,這也可以應用於VBA。

我想補充的,爲什麼這種區分重要的是,從2種主要觀點的理由:

保護:在兩次傳遞機制之間進行選擇,最重要的標準是保護從unwated變化的變量。當調用ByRef時,該過程可以通過該參數將值返回給調用代碼。換句話說,它可以再次引用相同的變量。 ByVal保護變量不被程序改變。例如,如果你想讓變量= 4,無論如何,你會使用ByVal。

表現:傳遞機制會影響性能,但通常不重要。一個例外是通過ByVal傳遞的值類型。在這種情況下,Visual Basic會複製參數的全部數據內容。因此,對於像結構這樣的大值類型,將ByRef傳遞給它可能會更高效。

對不起,很長的答案,希望它有幫助。

+0

中以非常明確的方式回答其他人提出的問題。親愛的用戶3170776我歡迎您的禮貌,但我仍然不明白它的含義如何:「通過價值傳遞的參數只能作爲程序單元的輸入。結果不能通過這些參數傳遞給調用者。引用傳遞的參數可以在任一方向或兩個方向傳遞信息。「它適用於VBA嗎?因爲下面的例子不是VBA。我很抱歉你能請你用更簡單的方式說VBAish謝謝你:P – ExoticBirdsMerchant

+0

價值意味着它被設置。您不能在另一個功能中再次調用此值。通過引用意味着可以再次調用該值。因此,在此示例中,PRO ADD,A,B A = A + B RETURN END – user3170776

+0

A通過引用傳遞,因爲用戶再次調用A並返回。但是,B被稱爲價值。在下面的例子中,ADD,A,4起作用。 A被定義爲A = A + B。因此用戶再次調用A並將B添加到它。但是,ADD,4,A不起作用,因爲4是一個值。所以4 = A + B會產生錯誤。當然,這也可以應用於VBA。那有意義嗎?讓我知道。 – user3170776