タイトル | : IDEノーエラー,exeにてエラー。 その他1件 |
記事No | : 16073 |
投稿日 | : 2015/01/30(Fri) 16:52 |
投稿者 | : まさお |
まさお と申します。 宜しくお願い致します。
WinXP Pro SP3 VB6 SP6 です。
下記コードはフォームモジュールに記述しました。
質問1) Sub Command1_Clickは統合開発環境(IDE)ではエラーになりません。 しかし実行ファイル(.exeファイル)を作って実行するとエラー番号:10「配列が固定されているエラー」が発生します。 回避方法は※βを※γに変更すれば良い、とは判っています。 しかしIDEで出ないエラーが何故実行ファイルで出るのか? IDEで出すにはどうすれば良いか? を教えて戴きたくお願い致します。
質問2) ※αのRemを解除するとIDEでは問題ありませんが(エラーが出ないので)、実行ファイルでは無限ループに陥ります。 1) Exit Sub or End Sub で「配列が固定されているエラー」が発生。 2) On Error GoTo により ErrorSub にジャンプ。 と、ここまでは判るのですが、ErrorSub にジャンプ後の End Sub で再度 ErrorSub にジャンプ,… を繰り返す事により無限ループに陥ります。 Sub Command2_Click() のように On Error GoTo でジャンプした後に発生したエラーでは On Error GoTo は無効になるはずですのに、何故 On Error GoTo が効き続けるのか? を教えて戴きたくお願い致します。
蛇足 Sub Test, f_Test の中身(何故こんな事をしているのか?)は無視してください。 これはあるexeプログラムで無限ループが発生し『IDEでは発生しないが exe で発生する』の原因を探るためエラー発生とは無関係な部分を省略した結果ですので、省略部が無ければ何の意味の無いエラーが発生するだけのコードです。
以上、宜しくお願い申し上げます。
====================以下、フォームモジュール内コード Private Type Type_T flg As Boolean End Type
Private Sub Command1_Click() Call Test MsgBox "Comp" End Sub
Private Sub Test() Dim Ct As Long
Rem On Error GoTo ErrorSub ※α '↑厳重注意! Rem解除するとExeにて無限ループに陥る。 Dim DimTs(0) As Type_T Call f_Test(DimTs) Call SaveString("ExitSub") Exit Sub
ErrorSub: Ct = Ct + 1 Call SaveString("ErrCt:" & CStr(Ct) & " " & Err.Description) '↑動作履歴を診る為に経過を保存。 End Sub
Private Sub f_Test(ByRef DimTs() As Type_T) Dim i As Long DimTs(0).flg = True Do While True For i = 0 To UBound(DimTs) With DimTs(i) '※β If .flg Then Exit For '※β End With '※β Rem If DimTs(i).flg Then Exit For '※γ Next If UBound(DimTs) < i Then Exit Do DimTs(i).flg = False Loop End Sub
Private Sub SaveString(ByVal sString As String) Dim FSO As New FileSystemObject With FSO.OpenTextFile("hoge.txt", ForAppending, True) .WriteLine sString .Close End With End Sub
Private Sub Command2_Click() Dim i As Integer On Error GoTo ErrorSub i = CInt("123456789123456789") '<=オーバーフローエラー MsgBox "Comp2" Exit Sub ErrorSub: MsgBox "Error!!!:" & Err.Description i = CInt("123456789123456789") '<=再度オーバーフローエラー ErrorSubには飛ばない
End Sub ====================以上、フォームモジュール内コード
|