Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10069 / 13646 ツリー ←次へ | 前へ→

【23765】終了ボタンに記述するマクロについて skuroyan 05/4/3(日) 17:20 質問[未読]
【23768】Re:終了ボタンに記述するマクロについて IROC 05/4/3(日) 19:35 回答[未読]
【23804】Re:終了ボタンに記述するマクロについて skuroyan 05/4/4(月) 22:31 質問[未読]
【23769】Re:終了ボタンに記述するマクロについて ウッシ 05/4/3(日) 19:50 発言[未読]
【23806】Re:終了ボタンに記述するマクロについて skuroyan 05/4/4(月) 22:39 質問[未読]
【23807】Re:終了ボタンに記述するマクロについて ウッシ 05/4/4(月) 22:47 回答[未読]
【23898】Re:終了ボタンに記述するマクロについて skuroyan 05/4/6(水) 20:43 質問[未読]
【23900】Re:終了ボタンに記述するマクロについて ウッシ 05/4/6(水) 21:06 回答[未読]

【23765】終了ボタンに記述するマクロについて
質問  skuroyan  - 05/4/3(日) 17:20 -

引用なし
パスワード
   EXCEL VBAで簡単な品番照合プログラムを作成しましたが、フォームに配置した「終了」ボタンを押してもエラーになってしまいます。一般的には、フォームを交互に表示させて入力をさせるようなプログラムでの「終了」ボタンへはどのように制御文を記述すればよいか、教えて下さい。
「終了」ボタンのマクロの内容は、次のとおりです。
Private Sub CommandButton1_Click()
  Unload UserForm1
  Unload UserForm2
End Sub
エラー内容は、次のとおりです。
実行時エラー'-2147417848(80010108)':
オートメーションエラーです。
起動されたオブジェクトはクライアントから切断されました。
⇒デバックボタンを押すと、第2画面を表示する UserForm2.Show で停止しています。その後、EXCELを終了させようと右上の「×」を押してもループしている感じで終わりません。強制終了するしかなくなります。

【23768】Re:終了ボタンに記述するマクロについて
回答  IROC  - 05/4/3(日) 19:35 -

引用なし
パスワード
   何を終了させたいのでしょうか?

ループ処理を停止したいのであれば、変数をフラグにして
ループ分の中でループを抜けるか、EXIT SUB や End で終了するような
判定を設ければ出来ます。

【23769】Re:終了ボタンに記述するマクロについて
発言  ウッシ  - 05/4/3(日) 19:50 -

引用なし
パスワード
   こんばんは

>Private Sub CommandButton1_Click()
>  Unload UserForm1
>  Unload UserForm2
>End Sub

>⇒デバックボタンを押すと、第2画面を表示する UserForm2.Show で停止

交互に表示という事ですから、UserForm1のCommandButton1_Clickで、
UserForm1を閉じてUserForm2を表示するのですか?

Private Sub CommandButton1_Click()
  UserForm2.Show
  Unload Me
End Sub

【23804】Re:終了ボタンに記述するマクロについて
質問  skuroyan  - 05/4/4(月) 22:31 -

引用なし
パスワード
   ▼IROC さん:
>何を終了させたいのでしょうか?
>
>ループ処理を停止したいのであれば、変数をフラグにして
>ループ分の中でループを抜けるか、EXIT SUB や End で終了するような
>判定を設ければ出来ます。
回答有難うございます。
説明不足で申し訳ありません。処理の流れは次のとおりです。
1.第1画面を表示する。
2.第1画面中のテキストBOXに入力されたら第2画面を表示する。
3.第2画面中のテキストBOXに入力されたら、第1画面中のテキストBOXに入力された内容を照合
4.合致したら「OK」と表示し、不一致だったら「NG」と表示
5.第1画面の終了ボタンが押されなければ、1.へ
ここで終了させたいのは、「画面表示とEXCELを普通に終了させたい」わけです。

終了ボタンに「EXIT SUB」を入れたところ、画面は消え、エラーもなくなりましたがEXCELの外枠とツールバーが残ります。この状態でEXCELを終了させようと右上の「×」を押しても終了しません。「1.第1画面を表示する。」では、入力待ち状態のため何か処理が必要なのでしょうか?

【23806】Re:終了ボタンに記述するマクロについて
質問  skuroyan  - 05/4/4(月) 22:39 -

引用なし
パスワード
   ▼ウッシ さん:
>こんばんは
>
>>Private Sub CommandButton1_Click()
>>  Unload UserForm1
>>  Unload UserForm2
>>End Sub
>?
>>⇒デバックボタンを押すと、第2画面を表示する UserForm2.Show で停止
>
>交互に表示という事ですから、UserForm1のCommandButton1_Clickで、
>UserForm1を閉じてUserForm2を表示するのですか?
>
>Private Sub CommandButton1_Click()
>  UserForm2.Show
>  Unload Me
>End Sub
回答有難うございます。
説明不足で申し訳ありません。
画面を交互に表示するのは、処理の途中で行いたいと思っています。
通常の処理ではUserForm1を閉じてUserForm2を表示するのですが、終了ボタンを押しても、意に反してUserForm2が表示されてしまうのです。
終了ボタンで、UserForm1を閉じてEXCELを終了したいと思っています。

【23807】Re:終了ボタンに記述するマクロについて
回答  ウッシ  - 05/4/4(月) 22:47 -

引用なし
パスワード
   こんばんは

>終了ボタンを押しても、意に反してUserForm2が表示されてしまうのです。
>2.第1画面中のテキストBOXに入力されたら第2画面を表示する。
終了ボタンをクリックする時にテキストBOXのExitイベントで第2画面が表示されて
しまうのでは?

>終了ボタンで、UserForm1を閉じてEXCELを終了したいと思っています。

Private Sub CommandButton1_Click()
  Application.Quit
  Unload Me
End Sub

【23898】Re:終了ボタンに記述するマクロについて
質問  skuroyan  - 05/4/6(水) 20:43 -

引用なし
パスワード
   ▼ウッシ さん:
>こんばんは
>
>終了ボタンをクリックする時にテキストBOXのExitイベントで第2画面が表示されて
>しまうのでは?
>
調べたところテキストBOXの「AfterUpdate」イベントが走ってしまうようです。何も入力されていませんが、実行を止める方法は無いでしょうか?

>終了ボタンで、UserForm1を閉じてEXCELを終了したいと思っています。
>
>Private Sub CommandButton1_Click()
>  Application.Quit
>  Unload Me
>End Sub
ご教授いただきありがとうございます。制御文「Application.Quit Unload Me
」を変更して試した結果は次の通りでした。
ケース1.:起動直後に終了ボタンを押した場合は、画面とEXCELが終了出来ました。
ケース2.:一度入力して、第1画面表示⇒第2画面表示⇒第1画面表示の状態で終了ボタンを押した場合は、当初の次のエラーになります。
------エラー内容-------
実行時エラー'-2147417848(80010108)':
オートメーションエラーです。
起動されたオブジェクトはクライアントから切断されました。
⇒デバックボタンを押すと、第2画面を表示する UserForm2.Show で停止しています。その後、EXCELを終了させようと右上の「×」を押してもループしている感じで終わりません。強制終了するしかなくなります。
----------------------
おそらく、違いは上記の「テキストBOXの「AfterUpdate」イベントが走ってしまう。」かどうかの差だと思われます。

【23900】Re:終了ボタンに記述するマクロについて
回答  ウッシ  - 05/4/6(水) 21:06 -

引用なし
パスワード
   こんばんは

>Private Sub CommandButton1_Click()
>  Application.Quit
>  Unload Me
>End Sub
これは、正しくイベントが制御された状態で通常ユーザーフォームを閉じるのと同時に
エクセルを終了するためのコードです。
実際は、別のブックが起動していないか等の確認処理も必要かと思います。

>調べたところテキストBOXの「AfterUpdate」イベントが走ってしまうようです。
ユーザーフォーム関連のイベントはフラグを用意して制御する事が多いかと思います。

どういう経緯で「AfterUpdate」イベントが走るのか解析してフラグでコントロール
して下さい。
そこらへんの経緯はこちらには分らないのでこの程度にしか回答出来ませんけど。

10069 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free