前提・実現したいこと
ユーザーフォーム1内のコマンドボタン3を押すことでフォーム4を呼び出し、
フォーム4内のテキストボックス1に"CLOSE"と入力することでフォーム1,4を両方閉じるようにしたいです。
(フォーム2,3やコマンドボタン1,2は今回関係ないので割愛させていただきます。)
詳細は下記「該当のソースコード」を参照していただきたいのですが、"CLOSE"以外の"END "と"SP "の場合は問題なく動作します。
"CLOSE"の場合だけオートメーションエラーが出てしまいます。
3/15 追記(補足)
ユーザーフォーム2内にコマンドボタンがあり、
Unload UserForm1
Unload UserForm4
の2行のみ記述している。
このコマンドボタンだと強制終了することもなく正しく動作する。
発生している問題・エラーメッセージ
「オートメーションエラーです。起動されたオブジェクトはクライアントから切断されました。」というエラーが出ます。
デバッグ画面では、フォーム1の「UserForm4.Show」の部分が黄色にハイライトされています。
該当のソースコード
vba
1Private Sub CommandButton3_Click() 'フォーム1のボタン3 2 3 '作業者が選択されていればフォーム4開く 4 If UserForm1.TextBox1 = "" Then 5 6 r = MsgBox("作業者を選択してください。") 7 If r = 1 Then 8 9 Application.OnTime Now(), "フォーカスu1t1" 10 11 End If 12 13 14 Else 15 16 UserForm1.Hide 17 UserForm4.Show '←エラー時ハイライトされる箇所 18 19 End If 20 21End Sub 22 23 24Private Sub textbox1_afterupdate() 'フォーム4のテクストボックス1 25 26 If UserForm4.TextBox1.Value <> "" Then 27 28 '変数 29 '------------------------------ 30 u4t1 = UserForm4.TextBox1.Value 31 '------------------------------ 32 33 Select Case u4t1 34 35 Case "CLOSE" 'フォーム閉じる 36 Unload UserForm1 37 Unload UserForm4 38 Exit Sub 39 40 Case "END " 'フォームクリア 41 42 UserForm4.TextBox1.Value = "" 43 Application.OnTime Now(), "フォーカスu4t1" 44 45 Case "SP " 'チェック 46 Application.OnTime Now(), "フォーカスu4t3" 47 48 End Select 49 50 End If 51 52End Sub 53
試したこと
・再起動…再現。
・別のブックに同じコードを記述…再現せず。
(なぜ新しく作ったブックでは再現しないのかが理解できていません。
「そういうもの」と思った方がいいのでしょうか?
3/14 追記(補足)
・デバッグ画面でハイライトされる
UserForm4.Show
を
UserForm4.Show vbmodeless
に変更。
→フォームは両方閉じることに成功しましたが、
フォームを閉じた状態でEXCELが固まり、
強制終了するようになりました。
3/15 追記(補足)
・hide、show、unload以外のステーメント、プロシージャを削除
→再現(両フォームが閉じた後にEXCEL強制終了)
補足情報(FW/ツールのバージョンなど)
再現が確認できたPC
Windows PRO /EXCEL 2016
Windows home /EXCEL LTSC

回答1件
あなたの回答
tips
プレビュー