[[20171207113758]] 『フォルダ内の全エクセルファイルを実行するマクロ』(hiro) ページの最後に飛ぶ

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

 

『フォルダ内の全エクセルファイルを実行するマクロについて』(hiro)

今、フォルダ内に三十数個のエクセルファイルがあります。
全て同じマクロ名を実行させたいのですができますでしょうか?
今はファイル一つ開いて、マクロからマクロ名を選び実効させてます。
マクロ名は12個あり、その内の一つのマクロ名だけ選んで
全ファイル同じ処理をします。
よろしくお願いします。

< 使用 Excel:Excel2016、使用 OS:Windows7 >


http://officevba.info/post-389/

ご参考に
(Q::) 2017/12/07(木) 12:41


(Q::) さん、度々有難うございます
試してみます。

(hiro) 2017/12/07(木) 12:50


他ブックのマクロを動かす命令は、Application.Run ですが、こちらはご存知ですかね? マクロを書いた場所が、標準モジュールなのか、シートモジュールなのかで少し変わりますよ。

あと、次々にブックを開いてブックを開くより、1つのブックにマクロを書いて、このマクロが他ブックを対象に処理する、という形の方が良いと思いますよ。 現行の方法だと、マクロに何か変更を加える場合、全ブックのマクロを書き換えないといけませんから。
(???) 2017/12/07(木) 16:35


(???)さん有難うございます。
Application.Run は知りませんでした。今は、(Q::) さんより参考にという資料で
Sub フォルダの中に含まれるファイルのファイルを順に変更する2()

Dim FolderName1 As String
Dim FolderName2 As String
Dim FileName As String

FolderName1 = “C:\処理前\”
FolderName2 = “C:\処理後\”

If FolderName1 = “False” Then
Exit Sub
End If

FileName = Dir(FolderName1 & “*xls*”)
Do While FileName <> “”
Workbooks.Open FileName
Cells(1, 1) = 1
Workbooks(Workbooks.Count).SaveAs FolderName2 & FileName
Workbooks(Workbooks.Count).Close
FileName = Dir()
Loop

 End Sub
これを書き換えて、12個のマクロの中に入れようと中身を解読中です。
よろしくお願いします。

(hiro) 2017/12/07(木) 16:46


フォルダのC:\処理前\内にエクセルファイルを入れて
下記を実行すれば
Sub Macro11()

Dim FolderName1 As String

 Dim FolderName2 As String 
 Dim FileName As String 
   
 FolderName1 = “C:\処理前\” 
FolderName2 = “C:\処理後\” 
  
 If FolderName1 = “False” Then 
 Exit Sub 
 End If 
   
 FileName = Dir(FolderName1 & “*xls*”) 
Do While FileName <> “” 
Workbooks.Open FileName


Workbooks(Workbooks.Count).SaveAs FolderName2 & FileName

 Workbooks(Workbooks.Count).Close 
 FileName = Dir() 
 Loop 
   
 End Sub

これでマクロ名 Macro11() を実行した時、C:\処理前\フォルダ内の全てのエクセルファイルが実効されますでしょうか?何分、Loop関数があるので、間違えると無限ループに入ってPCが反応しなくなるかも知れないので先に問い合わせてみました。
よろしくお願いします。

(hiro) 2017/12/07(木) 17:22


Workbooks.Open FileName

この間に文字を入れてたのですが、消えて直線だけになってしまったので再度記入しますと
この中に Macro11() の記述を差しこみする予定です。

Workbooks(Workbooks.Count).SaveAs FolderName2 & FileName

これでマクロ名 Macro11() を実行した時、C:\処理前\フォルダ内の全てのエクセルファイルが実効されますでしょうか?何分、Loop関数があるので、間違えると無限ループに入ってPCが反応しなくなるかも知れないので先に問い合わせてみました。
よろしくお願いします。
(hiro) 2017/12/07(木) 17:27


あれ?
フォルダ内のどれか一つのファイルを開いた後で、その中のマクロ名 Macro11() を実行させるので
Workbooks.Open FileName というのは多分、どれかファイルを開くという事だと思いますが
開いたファイルのマクロでこのWorkbooks.Open FileName が出てきていいのかな?
と疑問に思いました。いいのでしょうか?
よろしくお願いします。

(hiro) 2017/12/07(木) 17:35


Dir関数は、ファイル名を返します。 注意しないといけない点は、このときパスは返らない点です。
なので、WorkBooks,Open に指定するファイル名は、FolderName1 & FileName にしないといけませんよ。

あと、このままでも動くでしょうけど、Workbooks(Workbooks.Count)を SaveAs とかはあまり好ましくないです。以下のようにするのが一般的と思います。

    Dim wk As Workbook 'この行だけはDoループより前に書く

    Set wk = Workbooks.Open(FolderName1 & FileName)
    Application.Run wk.Name & "!" & ActiveSheet.Range("A1")
    wk.SaveAs FolderName2 & FileName
    wk.Close False

これは、標準モジュールにマクロが書かれているものを他から起動する例です。 マクロは12種類あるそうですが、どこかのセルに「データの入力規則」でマクロ名を列挙しておいて、これを1つ選択してからボタンでも押してマクロ開始するのが良いでしょう。

そして、無限ループさせてExcelをハングアップさせてしまう事を恐れてはいけません。実行前にブックを保存して、強制終了させても良いように備えてから動かせば良いだけです。また、ループ中に DoEvents を1行入れておくと、ESCキーやBREAKキーによる中断ができる可能性が出てきますので、試してみると良いかも。
(???) 2017/12/07(木) 17:36


(???)さん有難うございます。
そう簡単に一筋縄でいかないですねw
今日はそろそろ時間が無くなるので、明日以降にまた挑戦します。
有難うございました。

(hiro) 2017/12/07(木) 17:46


コメント返信:

[ 一覧(最新更新順) ]


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