: 'String "" から型 'Double' への変換は無効です。'

タグの編集
投稿者 メレメレのkoko  (社会人) 投稿日時 2017/12/15 17:30:53
プログラミング初心者です。

SPREADの入力エラーチェックの処理で、
入力したセルの文字を取得して
負の値にはエラーメッセージを飛ばす処理作りたいのですが、
負の値だったらエラーメッセージが出るようになったものの
空白でも同様のエラーメッセージが出てしまいます。
修正と解説をよろしくお願いいたします。
GetSouceはセルの文字列を取得するString型のファンクションです。

<ソースコード>
Public Class ZeromimanChk
Inherits ValidateChecked

Public Overrides Function Check() As Boolean
Dim minZero As Integer = 0
If (MyBase.GetSorce()) < minZero.ToString Then
MyBase.SetErrorMsg("0未満はだめ")
Return False
End If
Return True
End Function

End Class
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2017/12/16 11:19:45
.NET 版の Spread は使ったことがありませんが、
> : 'String "" から型 'Double' への変換は無効です。'
というメッセージからすると  CDbl("")  相当の処理になるのでしょうね。


> Dim minZero As Integer = 0
> If (MyBase.GetSorce()) < minZero.ToString Then

これって要するに、
 If GetSorce() < "0" Then
と同じ意味ですよね。
なので、GetSorce が "" を返してきた場合にも成立し、
SetErrorMsg が呼び出されることになる、と。


> 空白でも同様のエラーメッセージが出てしまいます。
空白時にはどのようになってほしいのでしょうか。
とりあえず、以下のようなパターンが思い当たりますが。

・空白だった場合
・非数値だった場合
・負数だった場合
・0だった場合
・正数だった場合

もしも数値として扱えるかどうかを調べたいのあれば、
Decimal.TryParse や Double.TryParse といったメソッドを利用できます。