
コピー元フォルダにあるxlsファイルを全てコピー先のフォルダにコピーするVBAを作っています。
既にコピー先フォルダに同名のファイルがある場合は上書きせずスキップし、
コピー先フォルダに無いファイルだけコピーしたいのですが、
Sub test()
Dim FSO As Object
Dim md As String
Set FSO = CreateObject("Scripting.FileSystemObject")
Set md = Format (Date, "MMDD")
FSO.CopyFile "C:\コピー元\*.xls", "C:\コピー先\"& md ,False
Set FSO = Nothing
End Sub
FSO.CopyFileをFalseにするとコピー先に同名のファイルがある場合に
エラーで止まってしまいます。
このエラーを無視してコピーを続ける方法はありますでしょうか。
今回は確認ダイアログなど一切出さずに処理する方法が知りたいのですが、
今後の為に同名のファイルがあれば上書き確認ダイアログを出し、
処理を分岐させる方法もありましたらヒントだけでも教えて頂けると嬉しいです。
作成はExcel2010ですが、Excel2002でも動作するように作りたいです。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
#1です。
ループを回していないのですね、失礼しました。On error resume nextで通用するのは、ファイル毎にループ処理してコピーしているケースです。
ファイル毎にループを回し、既存かどうかの問い合わせをして処理する一例です。
ご参考まで。
Sub test()
Dim FSO As Object, targetFolder As Object, targetFile As Object
Dim folderName As String, destFilePath As String, answer As String
folderName = "C:\コピー元\"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set targetFolder = FSO.getfolder(folderName)
For Each targetFile In targetFolder.Files
'拡張子判別のところは必要によりアレンジして下さい
If UCase(FSO.GetExtensionName(targetFile)) = "XLS" Then
destFilePath = "C:\コピー先\" & Format(Date, "MMDD") & "\" & targetFile.Name
If FSO.FileExists(destFilePath) Then
'既存なら問い合わせせずにパスする場合は、Thenの時の処理をコメントアウトして下さい。
answer = MsgBox(targetFile.Name & " がCopy先に存在します。上書きしますか?", vbYesNo)
If answer = vbYes Then FSO.CopyFile targetFile, destFilePath, True
Else
FSO.CopyFile targetFile, destFilePath, False
End If
End If
Next targetFile
Set FSO = Nothing
End Sub
完璧です。言う事なしです。
ループ処理と分岐はこうやればできるんですね。勉強になりました。
無事に動作しました。
しかも拡張子の指定に注意すればバージョンにかかわらず行けそうです。
ありがとうございます。
No.2
- 回答日時:
提示されたコードでは、あえてWSH を使わなくとも良さそうですが、
ファイルの存在確認は
FSO.FileExists("ファイルのフルパス") で得られます。
あとは上書きするなり、
削除
Set MyFile = fso.GetFile("c:\testfile.txt")
MyFile.Delete
WSH を使わないのであれば
FileCopy や Dir("ファイルのフルパス") や Kill あたりを
ヘルプで調べてください。
なお、WSH もつかえると便利なので下記から scd56jp.exe をダウンロードして
中の script56.chm (ヘルプファイル)をご覧ください。
http://www.microsoft.com/downloads/details.aspx? …
>作成はExcel2010ですが、Excel2002でも動作するように作りたいです。
2010では規定のファイルの拡張子(種類)が、xlsx や xlsm に替わるので
ここで引っかからないように注意しないと。
FSO.FileExistsを少し見てみたのですが、
これは1つのファイルに対してフルパスで指定するように見えるのですがあっていますでしょうか。
となると、フォルダ内の全ファイルに対してはループ処理のようなことをしていくのでしょうか。
調べてみようと思います。
No.1
- 回答日時:
>このエラーを無視してコピーを続ける方法はありますでしょうか。
On error resume next
で、エラーを無視して次を実行する。
真面目にやるなら、
FSO.FileExists
で事前に調べて、既存ならコピーしない
http://officetanaka.net/excel/vba/filesystemobje …
>今後の為に同名のファイルがあれば上書き確認ダイアログを出し、
後の方の、事前に調べるコードに、既存の時、
MsgBox("上書きしますか?", vbYesNo)
による処理分岐を盛り込む。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
以上、ご参考まで。
回答ありがとうございます。
On Error Resume Nextを使ってしまうと、
例えばコピー元のフォルダに
○○.xls
△△.xls
××.xls
と3つファイルがあり、
コピー先のフォルダに
○○.xls
と1つだけファイルがあった場合に、
△△.xls
××.xls
の2つがコピーされません。
上記の場合に
○○.xlsに対して何もせず、△△.xlsと××.xlsをコピーという処理を行いたいです。
FSO.FileExistsを使うとループ処理のようなことをする形になるのでしょうか。
提示して頂いたURLも含め調べてみようと思います。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Excel(エクセル) 1つのファイルを3つのフォルダにファイル名を【明日の日付】にして、コピーをしたい 2 2022/12/21 17:43
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- グループウェア 一太郎がイントラで開けません。対処方法を知りたいです。 3 2023/04/04 13:30
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/26 17:13
- Excel(エクセル) 【VBAファイル移動】2つのマクロを順に実行。1つ目のマクロが実行不可⇒2つ目が実行不可となる件 2 2022/07/29 12:17
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
frxファイルの役目
-
同じファイル名 上書きしないフ...
-
エクセルで複数のコメントのサ...
-
MSオフィス2013にMS365が上書き...
-
DVD-Rへファイルコピー(ライテ...
-
エクセルファイルをダブルクリ...
-
サーバー上で起動するVBからExc...
-
Dドライブから外付けHDへコピー...
-
ストリーム損失の確認とは?
-
エクセルのリンクの更新について
-
SDカードコピーエラー
-
エクセルファイルに「コピー」...
-
VB2005 ソリューションの中にX...
-
VBA:ファイルのコピー時のウィ...
-
VBスクリプトでファイルのコピ...
-
賃貸アパートの退去の時の返却...
-
内蔵HDD同士の転送速度について。
-
ホームページ内の文字や写真を...
-
サイトのページのあちこちを拾...
-
テキストファイルが開けません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
ファイルサーバ上のファイルが...
-
Vba初心者です。下記のコード助...
-
MSオフィス2013にMS365が上書き...
-
同じファイル名 上書きしないフ...
-
バッチファイル XCOPYで上書き...
-
エクセルのハイパーリンクがコ...
-
frxファイルの役目
-
[エクセル]コピーするとオブジ...
-
xcopyでのバッチコピー方法でコ...
-
バッチファイル 別ファイルにリ...
-
bat 同名ファイルコピー時にリ...
-
バッチファイルのコピーで
-
アクセス クエリを別のファイ...
-
vbsでファイルやフォルダのコピ...
-
マインクラフトPCをプレイしよ...
-
エクセル2010、図が大きすぎま...
-
現在のブックを閉じないで、マ...
-
開いている別のファイルにExcel...
-
FTPとファイルコピーの違いにつ...
おすすめ情報