2013-06-27 54 views
6

我想在Visual Basic中定義一個函數,它在給定的括號內計算所得稅。投入應該是收入,邊際稅率,低邊界邊界,以及 - 可選的 - 上邊界邊界。 (頂部支架沒有上部邊界)。確定實際傳遞給VBA函數的多少個(可選)參數?

下面是我如何去做的。首先,我定義一個 「斜坡」 的功能如下:

Public Function ramp(x) 
    ramp = (x + Abs(x))/2 
End Function 

這基本上是相同的,如果(X < 0,0,x)的。然後我定義爲稅功能(在荷蘭)作爲

Public Function schijfbelasting(inkomen, ondergrens, bovengrens, tarief) 
    schijfbelasting = ramp(tarief * (inkomen - ondergrens)) - ramp(tarief * (inkomen - bovengrens)) 
End Function 

此處「inkomen」 =收入「ondergrens」 =下托架邊界,「bovengrens」 =上部支架邊界,「tarief」 =邊際稅率,並且輸出「schijfbelasting」=指定括號中的稅。

這一切工作正常,但我想用

Optional bovengrens 

在Matlab中,使「bovengrens」(上部支架邊界)可選的,我會用「nargin」(參數個數)功能做一些這樣的:

Public Function schijfbelasting(inkomen, ondergrens, Optional bovengrens, tarief) 
If nargin==4 
    schijfbelasting = ramp(tarief * (inkomen - ondergrens)) - ramp(tarief * (inkomen - bovengrens)) 
Elseif nargin==3 
schijfbelasting = ramp(tarief*(inkomen-ondergrens)) 
End If 
End Function 

但是,我不知道類似Visual Basic中「nargin」的函數。它也可能是「如果論證」bovengrens「被定義」的話。有人知道如何解決這個問題嗎?提前致謝。

P.S.我知道我可以通過在頂部括號中填入一個非常大的數字來使代碼「工作」,但我不認爲這是一種優雅的編碼。

+3

了。因此,將'Optional bovengrens'移動到參數列表的末尾或者設置'Optional tarief'。太。 –

回答

7

您可以使用VBA的IsMissing函數測試可選參數。這裏有一個例子:

Public Sub OptionalArg(arg1, Optional arg2) 
Debug.Print arg1; IIf(IsMissing(arg2), "missing", arg2) 
End Sub 

測試這樣的:

Sub Test() 
OptionalArg 1 
OptionalArg 1, 2 
End Sub 
如果您使用的函數定義`可選parameter`後第一個`Optional`隨後所有的參數都必須`Optional`
+0

+1很好地回答了Doug。 – brettdj

+0

也可以將類型指定爲'Variant',隱式轉換可能會導致錯誤? 'Public Sub OptionalArg(arg1 as Variant,可選的arg2 as Variant)''''''''''''''''''''''''''''我已經使用了optionals,但是excel/vba對於數據類型的操作而言是臭名昭着的。 – Bmo

1

使用IsMissing功能只是測試的參數:

If IsMissing(bovengrens) Then ... 
+1

比你原來的答案要好得多:) –

+0

@DougGlancy嘿,是的,我總是使用缺省'Nothing'作爲可選變量參數,所以我忘了... – RBarryYoung

相關問題