2017-07-23 23 views
0

我想設置一個非常基本的VBA函數,它需要2個輸入;溫度和時間,然後當時間乘以2時,吐出新的temp值。注意temp = time * 100。VB函數返回一個輸入的新值

它會是這個樣子:

Function newVal(temp,time) 

    time = time*2 
    newVal = temp 

End Function 

因此,舉例來說,如果時間是1原來那麼溫度等於100,但現在我要吐了出來,如果時間乘以2就等於什麼溫度(即200,在新的單元格中),但保留原始單元格相同(即時間= 1,溫度= 100)。

任何幫助將不勝感激。

感謝

回答

0

方法接受參數有兩種方式,按值ByVal和參考ByRef

VBA中默認的方式是ByRef因此,如果您ommit的任何ByValByRef關鍵字在你的方法的參數聲明(像你上面的例子),將通過引用傳遞。

這是什麼意思?這意味着對傳遞的參數所做的任何更改都將與原始值相比較。

爲了避免這種情況,您需要按值傳遞參數。

的ByRef例如:

Function newVal(temp,time) 
    time = time*2 'This changes the original value of time 
    newVal = temp 
End Function 

BYVAL例如:

Function newVal(ByVal temp As Long, ByVal time as Long) 
    newVal = temp * (time * 2) 
End Function 

有一些例外的規則,例如對象只能通過引用傳遞。

你可以閱讀更多關於它here

+0

非常感謝你!我實際上是使用byval,但是我在一個單獨的行上有time = time * 2,它阻止了該函數的工作。 – Jemz42

+0

唯一的問題是temp已經與電子表格中的時間相關聯,所以公式已經存在。你會知道如何克服這個問題嗎? – Jemz42

+0

因此,對於clairfy,我基本上運行的時間= 2的情況。在表中,如果我把時間= 2,臨時會自動變爲200.所以,我可以實現這個scneario,而不包括函數內的公式? – Jemz42