• ベストアンサー

IF文で該当の処理を通らない

VB6 SP5 フォームのロードで構造体変数に 値を入れ、ボタンを押したときに IF文の処理を通したのですが aaaに20以上の数値を入れると 該当の処理を通らず全てELSEを 通ってしまいます 以下コード ////// 標準モジュール ////// Type Strct_Dat □□start_no(5) As Integer □□end_no(5) As Integer End Type Global StrctDat As Strct_Dat ////// フォーム ////// Private Sub Form_Load() □□With StrctDat □□□□.start_no(0) = 1 □□□□.start_no(1) = 10 □□□□.start_no(2) = 20 □□□□.start_no(3) = 30 □□□□.start_no(4) = 40 □□□□.end_no(0) = 9 □□□□.end_no(1) = 19 □□□□.end_no(2) = 29 □□□□.end_no(3) = 39 □□□□.end_no(4) = 49 □□End With End Sub Private Sub Command3_Click() □□Dim aaa As Integer □□aaa = 20 □□With StrctDat □□□□If .start_no(0) <= aaa And aaa <= .end_no(0) Then □□□□□□MsgBox ("0") □□□□ElseIf .start_no(1) <= aaa And aaa <= .end_no(1) Then □□□□□□MsgBox ("1") □□□□ElseIf .start_no(2) <= aaa And aaa <= .end_no(2) Then □□□□□□MsgBox ("2") □□□□ElseIf .start_no(3) <= aaa And aaa <= .end_no(3) Then □□□□□□MsgBox ("3") □□□□ElseIf .start_no(4) <= aaa And aaa <= .end_no(4) Then □□□□□□MsgBox ("4") □□□□Else □□□□□□MsgBox ("ELSE") □□□□End If □□End With End Sub 構造体の型をLONGにすると ちゃんと該当処理をとおります また、デバッグ時は正常で EXE化したときのみ該当処理を 通らなくなります 回避方法はあるのですが 何かご存知の方いらっしゃいましたら 教えて下さい よろしくお願い致します

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

何とも妙な現象ですね。条件式を変えるとうまく動く場合もあることから、コンパイラの最適化ルーチンのバグのようです。 VB6にはSP6が出ていますが、SP6でも修正されていません。MSKBにもこれに関する情報はないようです。 応急策としては、プロジェクト(P)→プロジェクトのプロパティ(E)...→「コンパイル」タブで「P-Codeコンパイル(P)」を選択するか、「ネイティブコードコンパイル(N)」を選択する場合は最適化オプションで「最適化なし(O)」を選択すると正常に動作するようです。

その他の回答 (4)

回答No.5

先ほどは失礼しました。 解決策になるか分かりませんが ローカルで宣言すればOKのようです ////// フォーム ////// Private StrctDat As Strct_Dat <--- ここ Private Sub Form_Load() With StrctDat .start_no(0) = 1 .start_no(1) = 10 .start_no(2) = 20 .start_no(3) = 30 .start_no(4) = 40 .end_no(0) = 9 .end_no(1) = 19 .end_no(2) = 29 .end_no(3) = 39 .end_no(4) = 49 End With Command3_Click End Sub

回答No.4

be-beさん 失礼しました。 再現できました。 コンパイルした時のみのエラーですから ステップインは出来ませんでした。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.3

質問者さんではありませんが、#2の方に補足を。 インタプリタ実行では現象は発生しません。ですので、ステップインで現象を確認することはできません。 現象が発生するのは、質問の中にあるように「EXE化したときのみ」です。

回答No.2

私の環境では再現できませんが MsgBoxは2になります。 ステップインで1行づつ追ってみたらどうでしょう