Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 8.1 Pro : Excel 2010)
呼び出した他ブックをクローズさせたい
投稿日時: 17/10/17 09:59:13
投稿者: ふぁんふぁn

起動元ブックのUserFormから標準モジュールを介して他ブックを開き、他ブックの処理が終了したらWorkbook_BeforeCloseを介して起動元のブックに制御を移す所までは問題なく動作していますが、Workbook_BeforeCloseしているにも関わらず他ブックが閉じられません。
※起動元のUserFormを閉じると他ブックは閉じます。
 
----------------------------------------------------------------------------------------------
起動元ブックと呼び出しブックについて
----------------------------------------------------------------------------------------------
 【起動元の処理】
 
  [UserForm]
   CommandButtonにて各処理を行う
   ・CommandButtonの制御処理
   ・Unload Me
   ・Call 他ブック呼び出し処理  ※標準モジュールにマクロあり
   
  [標準モジュール」
   Sub 他ブック呼び出し処理()
  
    Workbooks.Open Filename:=作業ブック, UpdateLinks:=3
    Application.Run "'" & 作業ブック & "'" & "!ブック_Open", 作業フラグ, 作業日付
   
    ※作業フラグ, 作業日付は受渡し用の変数
   
    この時、起動元ブックは開いたままで、他ブック処理終了を待っている状態 
----------------------------------------------------------------------------------------------
 【他ブックの処理】  
  
  ・ブックがOpenされ、起動元ブックで指定した標準モジュールのマクロを実行する
  ・手動で閉じる
  ・その後、起動元のUserFormを起動する
  
  [標準モジュール」 
   Sub ブック_Open(作業フラグ, 作業日付)
  
    受渡しの引数をブック内の変数にセットし、その後ブック内のシートで諸々の作業を行う
   
  「ThisWorkbook」 このブックを終了する際の処理
   Private Sub Workbook_BeforeClose(Cancel As Boolean)
   
    Call 終了処理    ※標準モジュールにある
   
  [標準モジュール」 
   Sub 終了処理()
  
    当ブックをSave
    起動元ブックをActivate
    Application.Run "'" & 起動元ブック & "'" & "!UserForm起動"
----------------------------------------------------------------------------------------------
 【起動元ブック】
   
  [標準モジュール」
   Sub UserForm起動()
   
    UserForm Show
 
----------------------------------------------------------------------------------------------
 
 起動元のUserFormが表示されるが、呼び出した他ブックが開いたままである。
 UserFormを閉じると他ブックが閉じる
   
   

回答
投稿日時: 17/10/17 10:12:11
投稿者: mattuwan44

>Workbook_BeforeCloseを介して起動元のブックに制御を移す所までは問題なく動作していますが、
>Workbook_BeforeCloseしているにも関わらず他ブックが閉じられません。

↑これだと、そうなりますね。
 
マクロをあっちのブックのブックの利用させて、そのマクロからこっちのブックのマクロを起動させて、
だと、いつまでたっても終わりが来ないので、
1つのブックから、制御したらいかがですか?

回答
投稿日時: 17/10/17 10:38:38
投稿者: WinArrow
投稿者のウェブサイトに移動

複数のブックを制御するときに大事なのは、
制御したいブック側(メイン)で全てコントロールすることです。
 
開かれたブック側で、メインブックを制御する
というようなことは考えないことです。

投稿日時: 17/11/02 14:02:15
投稿者: ふぁんふぁn

WinArrow さんの引用:
複数のブックを制御するときに大事なのは、
制御したいブック側(メイン)で全てコントロールすることです。
 
開かれたブック側で、メインブックを制御する
というようなことは考えないことです。

 
ご回答ありがとうございました。
 
メインブックのUserFormをメニューとして利用ており、CommandButton押下で他ブックを開き、他ブックを閉じたらメインブックのUserFormが起動すれば良い。このような仕組みでしたので他ブックの制御は簡単に出来るものと思っていました。
 
メインブック、他ブックのマクロを修正し何度かトライしましたが、メインブックのUserFormを閉じない限り他ブックのクローズ制御はできませんでした。
 
これ以上の方策が思いつきませんし、ご回答のように他ブックからメインブックの制御は無理そうなので諦めようと思います。