VB6で電子天秤をPCに接続して、測定データを…

VB6で電子天秤をPCに接続して、測定データを…

みなさんおしえてください。

質問文

みなさんおしえてください。

 今、VB6で電子天秤をPCに接続して、測定データを取り込むソフトを作っています。 こちらのいろいろな方々の質問と回答を参考して、下記のようなデータをテキストボックスへ
取り込むことができました。電子天秤からは、300個のデータを取り込もうと思っています。

いま悩んでいるのは、データを取り込んで測定値がNGかOKかを判定したく下記のような
プログラムを書いたのですが、うまく動作しなく悩んでいます。

動作は、「???.00 DATA」を除いた後ろのデータ「0.??」が、0.3未満であれば「OK」、0.31
以上であれば「NG」とメッセージボックスを出したいと考えています。
※データ取り込み後は、ENTERキーを押して改行します。

この判定を、ENTERキーを押して改行した際に毎回行いたいのですが、テキストボックス
の2行目以降に取り込んだ測定値を判定すると、0.31以上でも「OK」と出てしまいます。

2行目以降のデータもちゃんと「OK」「NG」が判定できるようにするためには、どのように
プログラムを変更すればよいか教えて頂けませんでしょうか?
よろしくお願いします。

 <電子天秤からのデータ>
001 0.02
002 0.00
・ ・ ・
・ ・ ・
・ ・ ・

<プログラム>
Sub 計算()

Dim ans As Integer
Dim num As Currency

 ans = Mid(txt1.text, 5, 4)
 num = Val(ans)
 
 If num <= 0.3 Then
 MsgBox "正解"
 
 ElseIf num >= 0.31 Then
 MsgBox "NG"

 End If

End Sub


Private Sub Command1_Click()
計算
End Sub

Private Sub txtInputData_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
計算
End If
 End Sub

回答

イレギュラー値に対しての対策がまだ不十分ですが、以下でどうでしょうか。


Option Explicit

Private checkedNum As Integer
Sub 計算()
 Dim ans() As String
 Dim i As Integer
 Dim num As Currency
 ans = Split(txt1.Text, vbLf)
 For i = checkedNum To UBound(ans)
 If ans(i) <> "" Then
 num = -1
 On Error Resume Next
 num = Val(Mid(ans(i), 5))
 On Error GoTo 0
 If num < 0 Then
 MsgBox "イレギュラー"
 ElseIf num <= 0.3 Then
 MsgBox "正解"
 Else
 MsgBox "NG"
 End If
 checkedNum = checkedNum + 1
 End If
 Next i
 
End Sub
Private Sub Command1_Click()
 計算
End Sub

Private Sub txt1_KeyPress(KeyAscii As Integer)
 If KeyAscii = 13 Then
 計算
 End If
End Sub

Leave a Reply

Your email address will not be published. Required fields are marked *