[[20160812130848]] 『VBAで他ブックのVBAを操作したい』(まめ) ページの最後に飛ぶ

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

 

『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 >


操作ファイル(マクロブック)から、
データファイルA.B.C,…を操作して
まとめファイルにデータを集約する

という感じにするとよいと思います

(マナ) 2016/08/12(金) 13:37


マナさん

アドバイスありがとうございます。

計算ファイルAにあるVBAを操作ファイルに記述すればよいということでしょうか?
(まめ) 2016/08/12(金) 13:40


>計算ファイルAにあるVBAを操作ファイルに記述すればよいということでしょうか?

そうです。現在のコードで操作対象のブックやシートをちゃんと指定すれば問題ないはずです。
また計算ファイルも10個に分割する必要もないかもしれません。

(マナ) 2016/08/12(金) 13:48


マナさん

ありがとうございます。
計算ファイルのVBAがかなり煩雑なため、できれば避けたい方法でしたが、他にないなら仕方ありませんね。

それなら、ファイル全体の設計を見直したほうがいいかもしれませんが……。
(まめ) 2016/08/12(金) 13:59


そうですか、Application.Runでするとしても
現在のコードで操作対象のブックやシートをちゃんと指定すれば問題ないはずです。
その修正が煩雑かもしれませんが。

(マナ) 2016/08/12(金) 14:10


>操作ファイルで計算ファイルAのVBAを計算ファイルAに対して実行する方法

そもそも出来ないと何故判断したのでしょう。
出来なかったコードを提示することは可能ですか。

(マナ) 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


「何も起こらずに終わった」のは恐らくエラーのせいじゃないですか。
On Error Resume Nextを削除してから、もう一回実行してみてください。

(x) 2016/08/12(金) 15:33


>Workbooks(FileAa).Close SaveChanges:=False ←計算ファイルAを閉じる

計算ファイルは、変更を保存せずに閉じていますが。
実際は、この前に、まとめファイルに転記しているのでしょうか?

>実行しましたが、何も起こらずに終わったため

何が起こって欲しかったのでしょうか。
適当にブレークポイントを設定して確認してはどうでしょうか。

(マナ) 2016/08/12(金) 15:35


>計算ファイルは、変更を保存せずに閉じていますが。
上記ではVBA構文の一部を例示させていただきました。
保存等は別のVBAで実行しています。

>何が起こって欲しかったのでしょうか。
計算ファイルAのVBAを手動で実行したときと同じ挙動をして欲しかったのですが、何も起こりませんでした。
(操作ファイルで挙動させることを前提とした記述ではないからでしょうが。)
(まめ) 2016/08/12(金) 15:47


>On Error Resume Nextを削除してから、もう一回実行してみてください。
外したところ、マクロaが定義されていないとして、エラー表示されました。
これについては以下の定義が、計算ファイルAに書かれているためだと思われます。

    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.