質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

15279閲覧

マクロで別をマクロを操作した後、元のマクロに戻りたい

3109

総合スコア80

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2018/05/04 11:29

編集2018/05/05 00:41

ExcelのVBAで第三者の作成したExcelのマクロを操作するマクロを作成しています。

操作したいワークブックのVBEにはパスワードがかかっていますが、
プロシージャーはPublicになっているので、
Application.Runメソッドで操作することまではできました。

ところがApplication.Runメソッドを使うと、
操作した側の元のマクロがアクティブではなくなってしまうのか、
そこで処理が止まってしまい、
ActiveWorkbook.SaveCopyAs以降の記述が処理されません

同作業を複数のワークブックに対し繰り返し処理させたいので、
ここで終了しては意味がないのです。

問題のある箇所を分解し抽出した文が以下となります。

Sub test() Workbooks.Open ("フルパス\操作したいファイル.xls") Application.Run "'操作したいファイル.xls'!マクロ名" ActiveWorkbook.SaveCopyAs "フルパス\操作したいファイル2.xls" ActiveWorkbook.Close (False) End Sub

4行目からActiveWorkbookとしているのは、
操作したマクロが自身のワークブック名を「Book*」と
新しくするためです。

3行目を「'Application.Run…」とコメントアウトすると
保存もクローズもされるので、
原因は操作の主導権(?)が
被操作側のワークブックに移ったせいではないかと推察しています。
どうしたら思い通りの処理を実現できるでしょうか?

皆様のお知恵を借りたく存じます。
よろしくお願いします。

環境:Windows 7, Excel 2010

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ステップ実行しても
ActiveWorkbook.SaveCopyAs "フルパス\操作したいファイル2.xls"
が実行されないということなら、
Application.Run "'操作したいファイル.xls'!マクロ名"
の内部に End ステートメントが記述されている可能性が大きいです。

投稿2018/05/04 21:37

iruyas

総合スコア1067

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

3109

2018/05/05 00:31

iruyas様。 いただいたアドバイスに従い ステップ実行を行ったところ、 Application.Runを通った後はプロシージャの文頭に戻り、 ActiveWorkbook.SaveCopyAs以降は実行されませんでした。 別のマクロブックに差し替えて試したところ、 保存もクローズも実行されました。 さらにそのマクロにEndステートメントを追加したところ、 同様の症状で停止しましたので、 iruyas様のご指摘の通り 今回扱ったマクロにEndステートメントが記述されている 可能性が高いと思われます。 今回の問題は ・私のApplication.Runメソッドの認識ミス ・多角的な検証の不足 ・単体のEndステートメントの存在を知らなかった ことにあります。 本当に助かりました。 的確な回答をいただき、ありがとうございました!
guest

0

当方でサンプルを作成して、提示のコードで実験してみましたが、
Application.Run以降のコードも問題なく実行されました。
ちなみに、Application.Runで呼び出すマクロは、セルに単純に現在時刻を入力するものにしました。

3行目を「'Application.Run…」とコメントアウトすると
保存もクローズもされるので、
原因は操作の主導権(?)が
被操作側のワークブックに移ったせいではないかと推察しています。

Application.Runで実行されるマクロに原因があると推測します。
マクロのコードを提示できませんか。
あるいは、再現できる条件(マクロ、設定など)を提示できませんか。

投稿2018/05/04 19:27

hatena19

総合スコア33620

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

3109

2018/05/05 00:08 編集

hatena19様。 私がApplication.Runメソッドを誤って理解していたようで、 対象のマクロブックを差し替えて原因を探るという方法に 考えが至っておりませんでした。 私も自作のマクロを対象にして検証してみたところ、 問題なく実行されました。 さらに他の回答者様からヒントをいただき、 そのマクロにEndステートメントを追加して試してみたところ、 件のステップで停止しましたので、 原因は操作しようとするマクロに Endステートメントが含まれている可能性が高いようです。 > Application.Runで実行されるマクロに原因があると推測します。 > マクロのコードを提示できませんか。 > あるいは、再現できる条件(マクロ、設定など)を提示できませんか。 問題のマクロを提示して解決法をご教示いただきたいのですが、 パスワードがかかっているため叶いません。 ご理解ください。 (ちなみに処理内容は自身のマクロの削除です。) ご協力いただき、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問