: '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
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
> : '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 といったメソッドを利用できます。