いつもお世話になります。
現在組んでいる処理のエラーの回避の仕方がわからないので、
教えて頂けないでしょうか。
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
・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
>魔界の仮面弁士様
教えて頂いたやり方でエラー回避できました。
ありがとうございました。
ツイート | ![]() |