ちなみにVBAで三項演算子は
IIf(Expression, TruePart, FalsePath)
と書く。問題となったコードがこちら
Sub ConvertToCurrency(ByVal value As String)
Dim price As Currency
price = IIf(Trim(value) = "", 0, CCur(value))
'-- 以下略
End Sub
なんの変哲もない、引数が空白なら"0"、空白以外なら通貨型(Currency)に変換するプロシージャ。
※文字列は渡ってこない前提
これの何が問題かというと、
valueに空白が渡ってくると「型が一致しません」というエラーになる。
原因は、式の評価と関係なくTruePartとFalsePartが実行されてしまうから。
以下のような処理をかけば、よりわかりやすいだろうか。
これを実行すると「true」、「false」と2回メッセージボックスが表示される。
'-- "true", "false” と2回メッセージが表示される
price = IIf(Trim(value) = "", TruePart(value), FalsePart(value))
Function TruePart(ByVal value As String) As Currency
MsgBox("true")
TruePart = 0
End Function
Function FalsePart(ByVal value As String) As Currency
MsgBox("false")
TruePart = CCur(value)
End Function
以上より、VBAでは行数が減るからといって、むやみに三項演算子(IIf関数)を使わないほうが良いだろう。
以上
written by @bc_rikko
0 件のコメント :
コメントを投稿