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化したときのみ該当処理を
通らなくなります
回避方法はあるのですが
何かご存知の方いらっしゃいましたら
教えて下さい
よろしくお願い致します
No.1ベストアンサー
- 回答日時:
何とも妙な現象ですね。
条件式を変えるとうまく動く場合もあることから、コンパイラの最適化ルーチンのバグのようです。VB6にはSP6が出ていますが、SP6でも修正されていません。MSKBにもこれに関する情報はないようです。
応急策としては、プロジェクト(P)→プロジェクトのプロパティ(E)...→「コンパイル」タブで「P-Codeコンパイル(P)」を選択するか、「ネイティブコードコンパイル(N)」を選択する場合は最適化オプションで「最適化なし(O)」を選択すると正常に動作するようです。
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.3
- 回答日時:
質問者さんではありませんが、#2の方に補足を。
インタプリタ実行では現象は発生しません。ですので、ステップインで現象を確認することはできません。
現象が発生するのは、質問の中にあるように「EXE化したときのみ」です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- Visual Basic(VBA) Excel VBA ユーザーフォーム 複数のユーザーフォームの閉じ方。 2 2022/04/27 11:29
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) vbaの計算 if elseと範囲について 6 2022/11/26 01:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
小窓を表示する時に、必ず右上...
-
SQLのWHEREで全てを質問する方法
-
新しいウィンドゥを最大化で立...
-
javascriptで別ウインドウを開...
-
<a href="#" …>の意味を教えて...
-
bodyにidをつける理由は何ですか?
-
インラインフレームで表示され...
-
別ファイルのfunctionの読み込み方
-
javascriptファイルは1つに統...
-
Dreamweaver で 外部JSを読み込...
-
特定のウィンドウ名を持つウィ...
-
base64encodeでの文字化けについて
-
外部から読み込まれたJava...
-
javascriptでbgmを自動再生する...
-
window.open でExcelファイルを...
-
外部ファイルを読み込ませるた...
-
プルダウンメニューを別ファイ...
-
onbeforeunload時のwindow.open...
-
ある一定時間操作していない場...
-
Vbscriptで自分自身のウィンド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
新しいウィンドゥを最大化で立...
-
SQLのWHEREで全てを質問する方法
-
小窓を表示する時に、必ず右上...
-
window.openでフルスクリーン表...
-
htmlファイルを開いた時の画面...
-
外部からのjs呼び出しについて。
-
町内会での不倫
-
IF文で該当の処理を通らない
-
Canvasを使って描画して面積取得
-
window.openの後にエンコードを...
-
色の指定で配列を使いたい
-
エクセルファイルをIE のウィン...
-
文字をクリックすると 小窓が開く
-
HP作成の小窓リンクを作るには?
-
window.open オートコンプリー...
-
サブウインドウの高さを自動で...
-
小窓を開くJSで、高さを調節し...
-
javascriptを別ファイルにして...
-
リンク先の別ウインドウをスク...
-
ポップアップ広告みたいな…
おすすめ情報