[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAで他ブックのVBAを操作したい』(まめ)
初めて質問いたします。
Excel VBAを使いデータ集計を行っているのですが、データ量が重いため、集計を10程度のファイルで分割して行い、計算結果を別ファイルにまとめている作業があります。
(イメージ)
計算ファイルA
計算ファイルB
計算ファイルC ⇒ まとめファイル
:
:
計算ファイルJ
それぞれのファイルを手作業でVBA実行すると、VBA実行と集計待ちが連続し、作業時間が膨らんでしまうため、これらの作業(それぞれのファイルでVBA実行)をコントロールする別ファイル(操作ファイル)を作って、操作できないかと考えています。
根本的な質問ですが、VBAでこうした設定をすることは可能でしょうか?
「Application.Run」を使えば、計算ファイルAにあるVBAを実行することは可能ですが、それはあくまで計算ファイルAにあるVBAを操作ファイルで実行させるに過ぎず、計算ファイルAに対して実行することはできません。
(↑私の認識だと)
操作ファイルで計算ファイルAのVBAを計算ファイルAに対して実行する方法があれば、ご教授いただけないでしょうか?
また、そもそも不可能であれば、その旨お教え頂けると助かります。
< 使用 Excel:Excel2007、使用 OS:Windows7 >
という感じにするとよいと思います
(マナ) 2016/08/12(金) 13:37
アドバイスありがとうございます。
計算ファイルAにあるVBAを操作ファイルに記述すればよいということでしょうか?
(まめ) 2016/08/12(金) 13:40
そうです。現在のコードで操作対象のブックやシートをちゃんと指定すれば問題ないはずです。
また計算ファイルも10個に分割する必要もないかもしれません。
(マナ) 2016/08/12(金) 13:48
ありがとうございます。
計算ファイルのVBAがかなり煩雑なため、できれば避けたい方法でしたが、他にないなら仕方ありませんね。
それなら、ファイル全体の設計を見直したほうがいいかもしれませんが……。
(まめ) 2016/08/12(金) 13:59
(マナ) 2016/08/12(金) 14:10
そもそも出来ないと何故判断したのでしょう。
出来なかったコードを提示することは可能ですか。
(マナ) 2016/08/12(金) 14:37
すいません、少し席を外してました。
計算ファイルAのVBAは、別ファイルからデータを抽出し、計算ファイルA上で関数等を使い集計しています。
(イメージ)
データファイル ⇒ 計算ファイルA 操作ファイルで以下のようなVBAを設定(説明用にやや簡素化しました)し、実行しましたが、何も起こらずに終わったため、挙動しないものと判断しました。
<以下、操作ファイルのVBA>
Sub 計算ファイルAを挙動()
'ファイル定義’ Dim PathA As String Dim FileAa As String
PathA = Worksheets("操作シート").Cells(2, 4).Value ←計算ファイルAのパス FileAa = Worksheets("操作シート").Cells(3, 4).Value ←計算ファイルAの名前
On Error Resume Next Application.DisplayAlerts = False
'計算ファイルAの更新’ Workbooks.Open Filename:=PathA & FileAa, ReadOnly:=False ←計算ファイルAを開く
Windows(FileAa).Activate
Application.Run "計算ファイルA!Module1.マクロa" ←計算ファイルAのマクロa実行
Workbooks(FileAa).Close SaveChanges:=False ←計算ファイルAを閉じる
Application.DisplayAlerts = Ture
Sheets("操作シート").Select ←操作ファイルのシート Range("A1").Select
End Sub
<以下、計算ファイルのVBA>
Sub マクロa()
'ファイル定義’ Dim PathB As String Dim FileBa As String
PathB = Worksheets("Control Panel").Cells(5, 4).Value ←データファイルのパス FileBa = Worksheets("Control Panel").Cells(7, 4).Value ←データファイルの名前
'データ貼り付け’ Workbooks.Open Filename:=PathB & FileBa, ReadOnly:=False ←データファイルを開く
Windows(FileBa).Activate ←データファイルのデータシートをコピー Sheets("データ").Select Cells.Select Selection.Copy
Windows("計算ファイルA.xls").Activate ←データを計算ファイルに貼り付け Sheets("計算シート").Select Range("A1").Select ActiveSheet.Paste
Range("A1").Select
Workbooks(FileBa).Close SaveChanges:=False ←データファイルを閉じる
Sheets("操作シート").Select ←計算ファイルのシート Range("A1").Select
End Sub
(まめ) 2016/08/12(金) 14:58
(x) 2016/08/12(金) 15:33
計算ファイルは、変更を保存せずに閉じていますが。
実際は、この前に、まとめファイルに転記しているのでしょうか?
>実行しましたが、何も起こらずに終わったため
何が起こって欲しかったのでしょうか。
適当にブレークポイントを設定して確認してはどうでしょうか。
(マナ) 2016/08/12(金) 15:35
>何が起こって欲しかったのでしょうか。
計算ファイルAのVBAを手動で実行したときと同じ挙動をして欲しかったのですが、何も起こりませんでした。
(操作ファイルで挙動させることを前提とした記述ではないからでしょうが。)
(まめ) 2016/08/12(金) 15:47
PathB = Worksheets("Control Panel").Cells(5, 4).Value ←データファイルのパス FileBa = Worksheets("Control Panel").Cells(7, 4).Value ←データファイルの名前 (まめ) 2016/08/12(金) 15:51
質問途中ですが、冒頭でアドバイス頂いたとおり、操作ファイルに直接計算ファイルAで記述していたVBA(挙動するように一部編集)を記述したら、動くようになりました。
そんなに大変そうではないので(冒頭にファイルパスを記述するだけ)、このやり方で操作ファイルを作ることにします。
ありがとうございました。
(まめ) 2016/08/12(金) 16:05
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.