こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【VBA】ファイルを開く→シートをコピー→保存

VBAを使って、複数ファイルを一気に編集したいです。

あるフォルダ内に、複数のエクセルブックと
VBAを登録したブックが入っています。

VBAの内容としては、
(1)フォルダ内のエクセルファイルをすべて開く
(2)各ファイル1ページ目のシートを複製(コピー)する
(3)上書き保存して閉じる
(4)VBAを登録したブックを閉じる
です。

下記のように書いてみたのですが、まったく動かないので
どこが間違っているかのアドバイスをいただければと思います。

-----------------------------------------------------
Sub test()

Dim Myfile, Filepath As String
Filepath = ThisWorkbook.Path 'フォルダ名取得
Myfile = Dir(Filepath & "\") 'フォルダ内のファイル名取得

Do While Myfile <> ""
Workbooks.Open Filename:=Filepath & "\" & Myfile
Workbooks(Myfile).Activate

Sheets(1).Select
Sheets(1).Copy after:=Sheets(1)

Workbooks(Myfile).Close SaveChanges:=True

Myfile = Dir()
Loop

ThisWorkbook.Close SaveChanges:=True

End Sub
-----------------------------------------------------
よろしくお願いいたします。

投稿日時 - 2012-07-24 23:12:03

QNo.7608970

困ってます

質問者が選んだベストアンサー

>まったく動かない
とは?
エラーメッセージか何か出ますか?

とりあえず何点かアドバイスするとしたら。

1)エクセルファイルを指定する。
Myfile = Dir(Filepath & "\*.xls")
としてxlsファイルに限定しないと別の種類のファイルがあると
Workbooks.Openメソッドでエラーになります。

2)自ブックは除外する。
Do While Myfile <> ""
  If Myfile <> ThisWorkbook.Name Then

    (ここで目的の処理)

  End If
  Myfile = Dir()
Loop

ThisWorkbookも同一フォルダ内にあるわけですから
ThisWorkbookを開こうとするとエラーになります。
除外しなければいけません。

3)ScreenUpdatingプロパティなどを制御する。
多数のファイルのOpenCloseを繰り返す処理ですから、
画面更新は止めておいたほうが良いです。
他にも、イベント制御をしておいたほうが良い場合もありますし、
ご自身の状況に応じて対応してみてください。

投稿日時 - 2012-07-25 00:23:35

お礼

>エラーメッセージか何か出ますか?
何もメッセージ等出ないのですが、処理がされないという状態でした。

>2)自ブックは除外する。
こちらを試してみたところ、無事動きました!
的確なアドバイスありがとうございます。

まだまだVBA初心者なので、これからも勉強したいと思います。
ありがとうございました!

投稿日時 - 2012-07-25 08:37:25

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問