[[20160622134546]] 『複数のマクロを実行したい。』(KUN) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数のマクロを実行したい。』(KUN)

 教えてください。

 マクロのEXCELファイルが複数あり、
  Book名=BOOK1 マクロ名=処理
  Book名=BOOK2 マクロ名=処理
  Book名=BOOK3 マクロ名=処理   のEXCEがあり、

 毎朝1回(AUTO_OPEN)で実行しようとしているのですが、

  Sub AUTO_OPEN()

  Workbooks.Open Filename:="BOOK1.xls"
  Application.Run "BOOK1.xls!処理"
  Windows("BOOK1.xls").Activate
  ActiveWindow.Close

  Workbooks.Open Filename:="BOOK2.xls"
  Application.Run "BOOK2.xls!処理"
  Windows("BOOK2.xls").Activate
  ActiveWindow.Close

  Workbooks.Open Filename:="BOOK3.xls"
  Application.Run "BOOK3.xls!処理"
  Windows("BOOK3.xls").Activate
  ActiveWindow.Close

 End Sub

 結果、BOOK1のマクロ(一番最初の記述したマクロ)しか
 実行できません。

 各々のマクロは正常に機能しています。 
 一連で実行しようとどうしてもうまくいきません。

 解決方法を教えてください。

< 使用 Excel:Excel2003、使用 OS:unknown >


 > 結果、BOOK1のマクロ(一番最初の記述したマクロ)しか実行できません。

 BOOK1が実行されるなら、残りも実行されていいはずですね。

 ステップ実行(F8キーを押す)で1行ずつ動作確認しながら進めてみて、
 Book1が終わった後、どんな展開になっているか確認してみてください。

(半平太) 2016/06/22(水) 15:35


 半平太様

 マクロの動きを確認してみました。
 BOOK1のマクロ(処理)は、

 別のBOOKをOPENして、集計をし、CLOSE する・・・というものなのですが、
 別のBOOKをクローズして、マクロの実行マーク(黄色しるし)も消えています。

 お手上げ状態です。
 どうか、宜しくお願い致します。
(KUN) 2016/06/22(水) 16:02

 BOOK1が、また別のブックを開いて、閉じてですかぁー

 なんか、こう云うコードって危なそうな気がするんですけど、
     ↓
 >Windows("BOOK1.xls").Activate
 >ActiveWindow.Close

 多分、全部そう言う書き方になっているんですよね?

 その2行をこう言う書き方の1行に変更できないですか?
       ↓
 Workbooks("BOOK1.xls").Close

 とりあえずテスト的に、
 Book1のマクロに書かれているハズの「別ブックを閉じるための2行」にだけ変更を加えてみてください。

 それでBOOK2の処理まで進む様なら、それが原因と言うことになります。

(半平太) 2016/06/22(水) 17:14


 一部、半平太さんのコメントと重複しますが。

 その Book1.xls の 処理 というプロシジャを、そのままコピペでアップしてみてください。

 それと、テーマとは異なりますが、カレントディレクトリーにあるブックという指定は、なんだか心配ですね。
 ブックフルパスを指定して開いてはいかがですか。

(β) 2016/06/22(水) 17:17


半平太様、β様

 宜しくお願い致します。

 Sub 処理()
    Sheets(Array("1", "2", "3", "4", "5", "6", "7")).Select
    Sheets("1").Activate
    Cells.Select
    Selection.ClearContents

    Sheets("操作").Select
    Range("B2").Select
    Application.ScreenUpdating = False

    実績

    Windows("マクロ.xls").Activate

    ActiveWorkbook.Save
    ActiveWindow.Close

 End Sub

 半平太様のおしゃるとおり、
 まさにそのとおりの記述をしています。
 ご指導宜しくお願い致します。

 β様
 ご指導宜しくお願い致します。

 追伸、
 マクロ初心者です。カレントディレクトリー??です
 お手数をお掛けいたしますが宜しくお願い致します。
(KUN) 2016/06/22(水) 17:39

 この中の 実績 および 式 というプロシジャのコードがみえないのですが、マクロ.xls って、また別のマクロブックですか?
 それとも、Book1.xls を呼び出した、最初にアップされたマクロブックですか?

(β) 2016/06/22(水) 17:47


 β様

 実績 と 式 はBOOK1の中に記述しているマクロです。

 説明が不十分で申し訳ございません。
 宜しくお願い致します。

 半平太様
 
 BOOK1マクロの最後の行の記述を変えてみたのですが、
 うまくいきませんでした。
 BOOK1で終了してしまいました。

 
(KUN) 2016/06/22(水) 18:05


 >>実績 と 式 はBOOK1の中に記述しているマクロです。

 それは見たらわかります。で、そのコードがどうなっているか見えませんけど とコメントしました。

 質問しているのは、 マクロ.xls というブックが何なのかということです。
 Book1 で新たに呼び出した別のブックなのか、それとも、Book1.xlsを呼び出した大元のマクロブックなのか。

 で、マクロ.xls が、大元のマクロブックで Windows("マクロ.xls").Activate の後、 式 プロシジャを抜けた段階でも
 それが アクティブなら

    ActiveWorkbook.Save
    ActiveWindow.Close

 ここで、大元のマクロブック自体が閉じられるわけで、その瞬間に、大元のマクロブックのマクロも消え、
 処理が、そこで終わってしまいます。

 いずれにしても、ブックをActive(コードでは WindowをActiveにしていますが)してシートをSelectして
 アクティブシートを前提にしたコード記述になっているようですが、こういったコードは【状況依存】コードと呼び
 どのブックのどのシートを相手にしているのか、どのブックを閉じているのか、そういったあたりが見えにくく
 保守フェーズの追加改定作業如何によっては、とんでもない不具合が発生するおそれがあります。
 そういうことがなかったとしても、コード自体の可読性が悪くなります。

 カレントディレクトリーを前提のブックオープン(これは 【PCの環境依存】コード)ともども
 コード記述については、正しい記述方法を、早く身につけられるべきです。

 ともあれ、マクロ.xls の正体を教えてください。

(β) 2016/06/22(水) 18:45


 β様

 お手数をお掛け致して申し訳ございません。

 マクロ.xls・・・は、key SQLでテータを抽出しているコードがexcelマクロに記述されています。
 このコードが大きくてココに記載できないのです。
 (関係するかわからないのですが)sub 入庫() ・・・ end sub
                sub 出庫() ・・・ end sub で書かれています。

 マクロの形態は、
 1、book1の処理マクロで、KEY SQL から対象の入庫データを抽出します。
 2、book2の処理マクロで、KEY SQL から対象の出庫データを抽出します。
 3、book1のデータをbook3に貼付ける。book2のデータをbook3に貼付ける。
   book3で、照合を行い実績資料を作成する。

 こんな流れなんですが、

 毎回、1〜3のマクロを手で実行しているので、
 今回新たにBOOK4で1〜3を順番に実行するマクロを作成したかったのですが・・・
 どうにもうまくいきませんでした。

 この説明で、ご指導頂くコトは無理でしょうか?
 なんとかうまくいくコトはできないのでしょうか?

 宜しくお願い致します。

(KUN) 2016/06/22(水) 19:34


 いやぁ・・・ 
 まず、マクロ.xls とは、どのブックのことですかという質問に明確に答えてほしいんです。

 大元マクロブック や Book1.xls とは別のブックなのか
 大元マクロブックのことなのか。

 それを明確にしてくださいと何度もお願いしています。

 その先、もしかしたら、関連プロシジャのコードアップをお願いするかもしれませんが、まずは、ここを明確にしてください。

 それと、【ブレークポイント】はご存じですか?

 マクロの必要なところにセットしておくと、実行がそこに行ったときに止まります。
 で、継続指示でまた動きだして、次のブレークポイントでとまります。

 これを続けていけば、どのブレークポイントを最後に、、マクロが消滅(?)してしまったかがわかります。

 とりあえずは 処理 プロシジャの

    Sheets(Array("1", "2", "3", "4", "5", "6", "7")).Select

    Windows("マクロ.xls").Activate

    ActiveWindow.Close

 と、本体マクロブックの

  Windows("BOOK1.xls").Activate

 これらに設定した上で、最初から実行してみてください。

 ブレークポイントの設定がわからなければ、たとえば

http://www.239-programing.com/excel-vba/basic/basic022.html

 を参考にしてください。

(β) 2016/06/22(水) 19:53


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.