
複数のファイルのエクセルファイルに対し、同じ処理を行うマクロを教えてほしいです。
処理するファイル数が一定でないため、現在は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
No.2ベストアンサー
- 回答日時:
この質問にはどの範囲のフォルダなどのファイルを対象にするのか書かないと、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
は不要ではないのかな。
ありがとうございます。
ある特定のフォルダに納めたファイル全ての処理を行いたかったんです。
提示された式で無事走りおえました。
中に入れ込めばよかったのですね。
No.3
- 回答日時:
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
と言う感じの事とは違いますか?
ありがとうございます。
No.2の方と同じやり方ですよね。
Debug.Print Fnameというのは、データ保存する前に、念のためファイル名を返して置くという認識でいいのでしょうか。
No.1
- 回答日時:
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
ありがとうございます。
今回はNo.2の方の方法で解決することができました。
ですが、貴方が提示されたFSOオブジェクトを利用すると、視覚的に非常にわかりやすいですね。
次回、同じようなケースがありましたら、利用したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
C++ Builder6.0 TNMFTPコンポー...
-
シグナル 6(SIGABRT)とは?
-
ListViewから選択中の文字列を取得
-
どう増強すべきか
-
フォーカスがどこか行ってしまう
-
どうやってもFor文を抜けてしま...
-
【Vb.net】プリンタジョブの取得
-
特定の名前のオートシェイプの...
-
複数個のTextBoxでいずれかの内...
-
vbaのエラー対応(実行時エラー...
-
IF文に時間(何時から何時ま...
-
VBA マクロ 英語版WINDOWSで全...
-
VB6にてネットワーク上にある共...
-
c# の try の入れ子
-
EXCEL-VBAでキー入力で処理を分...
-
順番に処理させたい
-
特定のファイルを他のプロセス...
-
Excel VBA セルの名前があるか...
-
ドリブン??
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
private subモジュールを他のモ...
-
どう増強すべきか
-
Excel VBA セルの名前があるか...
-
vbaのエラー対応(実行時エラー...
-
IF文に時間(何時から何時ま...
-
特定の名前のオートシェイプの...
-
シグナル 6(SIGABRT)とは?
-
マクロで、次のコードへ行く前...
-
どうやってもFor文を抜けてしま...
-
【Vb.net】プリンタジョブの取得
-
特定のファイルを他のプロセス...
-
VB6にてネットワーク上にある共...
-
シェルスクリプトでファイル内...
-
【VBA】エラー処理で別プロシー...
-
cobolのコントロールブレイク
-
Functionで戻り値を複数返す方法
-
エクセル VBAで複数セル選択時...
-
【C#】Page_Loadさせない方法に...
-
ExcelのVBAで、選択したファイ...
おすすめ情報