エラーを回避するには?

解決


さとこ  2003-10-30 21:14:50  No: 80158

いつもお世話になります。
現在組んでいる処理のエラーの回避の仕方がわからないので、
教えて頂けないでしょうか。

Form1にあるオプションボタンを選択すると、
Form2が表示されます。
Form2のForm_Loadで、画面に表示する項目の編集を行うのですが、
その項目はデータベースを読み込んで編集します。

データベースの読込みに失敗した場合は、Form2を閉じて、
元の画面の処理に戻るようにしたいのですが、
Form2のForm_LoadをExit  Subで抜けて、Form1に処理が戻った所で
「実行時エラー  '346':既にアンロードされています」が表示されます。
このエラーを回避するにはどうしたら良いのでしょうか?

データベースの読込みに失敗した場合は、Form2が全く表示される事がないように
したいのですが、そうなるとForm1でForm2を呼び出す前にDBのチェックを
行うしかないのでしょうか?

大雑把なものですが、コーディングを下記に記述しました。
ご教授宜しくお願い致します。

'''''Form1

Private Sub optbtn_Mouseup(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

    Select Case Index
        Case 0
        Case 1
            Form2.Show vbModal
        Case 2
    End Select
        
End Sub

'''''Form2

Private Sub Form_Load()

    Dim flg As Integer
    
    flg = 0
    Call SYORI_1(flg)
    If flg = 1 Then
        Unload Form2
        Exit Sub
    End If
    
    Call SYORI_2

End Sub

Private Sub SYORI_1(x As Integer)

    If DB読み込み成功 Then
        FORM2表示項目編集
    Else
        x = 1
    End If
    
End Sub


魔界の仮面弁士  2003-10-30 21:41:34  No: 80159

・Initializeイベントを使う
・Load前に接続する
・呼び出し側でエラートラップする

のいずれかになると思います。例えば、こんな感じですね。

'--- Form2
Option Explicit

Friend Function ShowEx( _
    Optional Mode As FormShowConstants = vbModeless, _
    Optional Owner As Form) As Boolean

    'DBへの接続処理
    If ConnectDB() Then
        '接続成功
        ShowEx = True
        Me.Show Mode, Owner
    Else
        '接続失敗
        ShowEx = False
    End If
End Function

Private Sub Form_Load()
    'DB接続後の処理
End Sub

そして呼び出し側(Form1)は、Form2.Showの替わりに、
独自定義のShowExを使うようにします。

 '戻り値判定が不要なら、『Form2.ShowEx vbModal』でも可
 If Form2.ShowEx(vbModal) Then
     :
     :
 End If


さとこ  2003-10-30 23:46:10  No: 80160

>魔界の仮面弁士様
  
  教えて頂いたやり方でエラー回避できました。
  ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加