[[20210507161027]] 『マクロから別ブックのマクロを実行して操作する』(まつもと) ページの最後に飛ぶ

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

 

『マクロから別ブックのマクロを実行して操作する』(まつもと)

お世話になります。
いろいろ検索したり自分なりに考えてみたのですが、
どうしてもわからないので質問させてください。

共有しているブックにマクロAがあり、
実行するとファイル選択ダイアログが2回表示され、
入力、出力ファイルをそれぞれ指定してファイルを出力するマクロになっています。
現状このファイルは共有のため編集することが難しいです。

やりたいことは、別のブックのマクロBからマクロAを実行し、
マクロB側から入力、出力ファイルをそれぞれ入力して実行させたいのですが、
良い方法はありますでしょうか。

よろしくお願いします。

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


基本的には、
Application.Run パス名!マクロ名
で実行できることがあるので、ネットなどで検索してみて欲しい。

・対象マクロがどのモジュールに書かれているか
・Private属性の関係
・パス名にスペースが含まれている場合
など留意点は色々あるかもしれない。

(γ) 2021/05/07(金) 17:26


 別ブックが開かれているかどうかで書き方が若干変わります。

 開いてない
 "'" & パス & ブック名 & "'!" & マクロ名
 "'C:\xxxxxxx\Book1'!マクロ名"

 開いてる
 "'" & ブック名 & "'!" & マクロ名
 "'Book1'!マクロ名"

 因みに↑拡張子書いてません。
(Jemma50) 2021/05/07(金) 18:16

 ちょっと確認したところをメモしておきます。何かの参考になれば。

 (1)開いていなければ、自動で開きます。
 (2)ブック名の拡張子は省略可能
 (3)private属性のマクロでも実行可能(*)
 (4)同名のマクロが複数ある場合は、module名を指定しないとエラーとなる。
      Application.Run  "ブック名!module1.test" などとする。
 (5)シートモジュール、Thisworkbookモジュールに記載のマクロも実行可能。
      Application.Run  "ブック名!Sheet1.test"
      Application.Run  "ブック名!ThisWorkbokk.test"

 なお、上記で「ブック名」と書いたところは"標語的記述"です。
 既に指摘いただいたように、
 カレントフォルダでなければフォルダ指定が必要だし、
 ''で囲む必要があるようです。

 なお、確認したのはExcel2010です。他のバージョンでの動作は別かもしれません。
 また、(*)のところは、仕様的にどうなんだろうという気がしないでもない。
(γ) 2021/05/07(金) 18:56

みなさま回答ありがとうございます。

Application.Run でマクロBからマクロAを実行できることは確認できましたが、
マクロAのファイル選択ダイアログにファイルパスを入力するにはどうすればよいでしょうか。

マクロAを呼び出す(実行する)とインタプリタのステップ?(←すみません言葉がわかりません)が
マクロAに移ってしまいます。

自分なりに考えて、
マクロブックを別プロセスで開き、COMオブジェクトで操作・・・
なんてことを考えましたが、やり方がわからない上に複雑そうです。

なにか知恵をお借りできたらと思います。
よろしくおねがいします。

(まつもと) 2021/05/12(水) 10:55


すみません、質問を整理させていただきますと、

・マクロA
 ファイル選択ダイアログが表示されるマクロ

・マクロB(作りたいもの)
 マクロAを呼び出す
 マクロAのファイル選択ダイアログにファイルパスを入力して開く

良い方法はないでしょうか。
Excel以外のソフトウェア(cmdなど)と連携しても構いません。
よろしくお願いします。

(まつもと) 2021/05/14(金) 12:09


マクロBで引数渡すとダイアログ開かずそのまま実行するマクロA'を作るのじゃダメなの?
(砂糖) 2021/05/14(金) 12:44

一部、内容がかぶりましたがそのまま投稿します。

要は、マクロAで表示される【ファイル選択ダイアログ】の操作を自動化したいってことですよね。
お困りの部分は想像できたのですが、解決法がおもいつかなかったのでROMってました。

他アプリの使用がありだというなら、いま流行りのRPAなんかに手を出してみてはいかがでしょうか。
(コメントしておいてですが、私自身はRPAの知識はないのでアドバイスはできません)

また、「現状このファイルは共有のため編集することが難しいです。」とのことですが、まぁよくある話ですよね。
私も似たような経験があり、たまたまマクロA側のソースコードが見られる状況だったので、そのまま別ブックとしてコピーして自分用に改造したものを普段使いするようにしてます。
(今回でいえば、ダイアログでいちいち聞いてくるんじゃなくて、何らかのルール(表?)から、入力用のファイルパス、出力用のファイルパスを取得して進むように改造すればよいですよね。)

ちなみに、マクロAのプロジェクトがパスワードでロックされているなら・・・・・ごにょごにょすれば回避できるかもしれませんがお勧めしません。
(それはマクロを作った側からするといじるなというメッセージです)

(もこな2 ) 2021/05/14(金) 12:52


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

おっしゃるとおり、全員が共有して使用するファイルで、
外注で作成してもらったマクロのため、編集が厳しいです。
パスワードはかかっていませんでしたが。

個人で使用する分にはコピーして編集して使用できますが、
今回自分が作ろうとしているものは全員を対象に作業効率化を目指しているものなので、どうしても・・・という葛藤がありました。

VBAでの実現がなかなか難しそうなので、自動化ツールを使用するか
ダメ元でマクロAのファイルを編集できるか上に相談してみます。

みなさま回答ありがとうございました。
(まつもと) 2021/05/14(金) 14:46


ファイル選択ダイアログを開くマクロを呼び出したい、
ということだったのですか。
>実行するとファイル選択ダイアログが2回表示され、
>入力、出力ファイルをそれぞれ指定してファイルを出力するマクロになっています。
というのと随分話が違う印象です。

ファイル選択ダイアログなら、
Application.FileDialogなり、
GetOpenFileNameなり
で一発ですが。

話は良く聞いてみるものですね。
まあ、私は自分の整理に役立ったので、有益ではありましたが。
頑張ってください。

(γ) 2021/05/14(金) 15:33


コメント返信:

[ 一覧(最新更新順) ]


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