tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル IDEノーエラー,exeにてエラー。 その他1件
投稿日: 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
====================以上、フォームモジュール内コード

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。