[[20210611111706]] 『別ブックのマクロを実行と同時に自ブックを閉じた』(VBA辛い) ページの最後に飛ぶ

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

 

『別ブックのマクロを実行と同時に自ブックを閉じたい』(VBA辛い)

お世話になります。

表題の通り、別ブックのマクロを実行と同時に自ブックを閉じたいと考えています。
詳しく説明すると、

book1のマクロ(呼び出し元、これを作りたい)

    'book2のマクロを実行する
    '実行した直後に自ブックを閉じる

book2のマクロ(呼び出される側、編集禁止)

    'book1を開いて処理、開かれている場合はエラーmsgbox
    'book1を保存して終了

book2の都合上、book1を閉じた状態で実行しなくてはならず、苦労しています。

なにか方法、代替案などありましたらお願いいたします。

< 使用 Excel:Excel2013、使用 OS:Windows10 >


質問のことは可能と思われます。

ただ、↓が腑に落ちません。
>book2の都合上、book1を閉じた状態で実行しなくてはならず

どんな都合なのですか?
差し支えなければ後学のためにおしえてください。

(もこな2) 2021/06/11(金) 11:33


↑ちょっと修正

質問のことは【book2のマクロ】側の判定で対応可能と思われます。
>book1を開いて処理、開かれている場合はエラーmsgbox
↑これを、【開かれていなければ】開いて処理、開かれている場合は【そのまま使う】
とすればいいだけでは?

(もこな2) 2021/06/11(金) 11:38


基本的な考え方、マクロは一人歩きの放浪は出来ない。
一本道を進み、同じ道を引き返して最後に入口に変えって来なければならない。
こんな感じですかね。

マクロ1 → マクロ2 → マクロ3 → マクロ4 とたどった場合
マクロ4からマクロ1には直接戻れない。

マクロ4 → マクロ3 → マクロ2 → マクロ1 と戻る必要がある。

(オーソドックス) 2021/06/11(金) 11:49


 Book1を開かなかければいいのでは?
 新たにBook3をつくってBook3からBook2のマクロを実行すれば?
(´・ω・`) 2021/06/11(金) 12:28

 >マクロ4からマクロ1には直接戻れない。
 何故なの?
 ほんとうですか?
(vbas) 2021/06/11(金) 14:12

皆様回答ありがとうございます。

どんな都合なのですか?

book2マクロ側の仕様で、book1を開いている場合はエラーを出して強制終了してしまうためです。
また、book2は編集禁止のため改変できません。

基本的な考え方、マクロは一人歩きの放浪は出来ない。

SubやFunctionはネストされて実行しているのは理解しています。
今回やりたいことを実現させるために、別プロセスExcelのマクロを実行するのは可能でしょうか?

新たにBook3をつくってBook3からBook2のマクロを実行すれば?

実はそうすればできるのかなと考えていましたが、
ファイルが増えるうえにメンテナンス性も悪いため避けていました。
やりたいことが実現できるのであればこの方法でやむなしとは考えています。

考えたことは、
・もうひとつマクロブックを作る
・別のプロセスで起動してマクロを実行する

なのですが、実現可能かわかりません。

他の手法でも良いです。アイデア、助言等いただければ幸いです。

(VBA辛い) 2021/06/11(金) 15:23


 Book3は、Book1をコピーして、作ります。
 Book1は直接編集しないで、今までやってたBook1の編集はBook3でやる。

 Book3のマクロは、
 SaveAs で自分自身(Book3)のコピーを Book1として保存し、Book2のマクロを実行する。
 Book2はBook1を見に行......
(´・ω・`) 2021/06/11(金) 15:30

 SaveAs じゃなくて、SaveCopyAs
(´・ω・`) 2021/06/11(金) 15:33

似たような。

[[20190417160657]] (9414)『2つのユーザーフォーム』(あきお)
(オーソドックス) 2021/06/11(金) 15:40


´・ω・` さん

その方法を使えばなんとか行けそうな気がします。
希望が見えました。ありがとうございます!

オーソドックスさん

ブックを3つ作って試してみましたが、
呼び出し元のブックを閉じるとマクロが強制終了されました。
やはり呼び出し元に戻る必要があるんですね。
ありがとうございました!

(VBA辛い) 2021/06/11(金) 16:29


ふとおもったのですが、book2側でbook1が開かれているかどうやっても判定してるんでしょうか?
ブック名で判定しているなら、book1側でbook2を呼び出す前に自身を別名で保存すればよくないですか?
そして、book1側に処理権が戻ってきたら、もとの名前で保存しなおして別名で保存したほうは削除すればよいような気がします。

(もこな2) 2021/06/12(土) 10:02


Application.OnTime Now(), "Book2!'マクロ名'"
ThisWorkbook.Close

どうなるのか不明
(オーソドックス) 2021/06/13(日) 04:14


もこな2さん

book2の判定箇所を見てみました。
Open Filepath For Append As #1
Close #1
でエラー番号を取得している感じですね。
´・ω・`さんと似たような方法で行けそうですね。
ありがとうございます!

オーソドックスさん

そんな実行方法もあるんですね。
試してみます!
(VBA辛い) 2021/06/14(月) 13:06


Application.OnTime
を試してみたところ、簡単に実行でき、book1も閉じることができました。
ありがとうございます!
(VBA辛い) 2021/06/14(月) 13:21

コメント返信:

[ 一覧(最新更新順) ]


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