プロが教えるわが家の防犯対策術!

複数のファイルのエクセルファイルに対し、同じ処理を行うマクロを教えてほしいです。

処理するファイル数が一定でないため、現在はDo While~Loop構文を用い強引に処理しています。
しかし、この方法では処理が終わる(アクティブファイルが無くなる)とエラーメッセージが出るため、煩わしいです。

Do Until構文で、終了条件を指定したらよさそうなのですが、どのように書けばいいのかわかりません。

現在記述しているものは以下です。
--------------------------------------------------------
Sub 連続処理()

Dim BookName As String
Dim PathName As String
PathName = "D:\A1\連続処理\"
BookName = Dir(PathName & "*.xls")
 
Do Until BookName = ""
 Workbooks.Open PathName & BookName
 BookName = Dir()
Loop

Do While (1)
  ・
  ・(処理作業を行うマクロ)
  ・
Workbooks(ActiveWorkbook.Name).Close savechanges:=True
Loop

End Sub

A 回答 (3件)

FileSystemObjectというのを使ってみてはどうですか。



Dim FSO As New FileSystemObject
Dim folder As Folder
Dim file As File
Dim PathName As string
PathName = "D:\A1\連続処理\"
Set folder = FSO.GetFolder(PathName)
For Each file In folder
'ファイルの処理
Workbooks.Open(file.name)
.....
Next file
    • good
    • 0
この回答へのお礼

ありがとうございます。
今回はNo.2の方の方法で解決することができました。
ですが、貴方が提示されたFSOオブジェクトを利用すると、視覚的に非常にわかりやすいですね。
次回、同じようなケースがありましたら、利用したいと思います。

お礼日時:2009/06/16 17:32

この質問にはどの範囲のフォルダなどのファイルを対象にするのか書かないと、1つのフォルダなら


Sub Test01()
Dim BookName As String
Dim PathName As String
PathName = "C:\Documents and Settings\XXX\My Documents\"
BookName = Dir(PathName & "*.xls")
Do Until BookName = ""
(BookNameブックオープン)
( 処理)
BookName = Dir()
Loop
(もしあれば終わり処理)
End Sub
でよいのでは。
ーー
Do While (1)
  ・
  ・(処理作業を行うマクロ)
  ・
Workbooks(ActiveWorkbook.Name).Close savechanges:=True
Loop
は不要ではないのかな。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ある特定のフォルダに納めたファイル全ての処理を行いたかったんです。
提示された式で無事走りおえました。
中に入れ込めばよかったのですね。

お礼日時:2009/06/16 17:22

Sub try()


 Dim Fname As String
 Fname = Dir("R:\*.xls")
 Do Until Fname = ""
   Workbooks.Open "R:\" & Fname
   '何かの処理
   Debug.Print Fname
   Workbooks(Fname).Close True
   Fname = Dir()
 Loop
End Sub

と言う感じの事とは違いますか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

No.2の方と同じやり方ですよね。
Debug.Print Fnameというのは、データ保存する前に、念のためファイル名を返して置くという認識でいいのでしょうか。

お礼日時:2009/06/16 17:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!