コピー元フォルダにある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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
エクセルVBAで開いているファイルをコピーする方法
Visual Basic(VBA)
-
エクセルVBA 開いているブックのコピー
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
5
FileSystemObject CopyFile の指定したファイル名にアスタリスクが付いていないと書き込みエラーが発生する
その他(プログラミング・Web制作)
-
6
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
7
エクセルでエラーが出て困っています。
Excel(エクセル)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
サブフォルダー内のPDFファイルを別フォルダにコピーするVBA
Excel(エクセル)
-
10
Access クエリ実行が急に非常に遅くなりました。
Access(アクセス)
-
11
エラーコード 70 「書き込みできません」について
Visual Basic(VBA)
-
12
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
13
AccessVBAで作成したExcelファイルを削除する方法は?
Visual Basic(VBA)
-
14
VBAにおいて、ファイルの移動にMoveFileを使っていますが、
Visual Basic(VBA)
-
15
split関数で区切り文字がない場合
Visual Basic(VBA)
-
16
「RunSQL」と「Execute」の違い
Access(アクセス)
-
17
自身のファイルのコピーを作成したい
Access(アクセス)
-
18
VBSで作成したフォルダにファイルをコピー出来ない
Visual Basic(VBA)
-
19
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
20
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
現在のブックを閉じないで、マ...
-
バッチファイル XCOPYで上書き...
-
[エクセル]コピーするとオブジ...
-
Excel ハイパーリンク設定につ...
-
バッチファイルのコピーで
-
ファイルをコピーできない
-
エクセルのマクロについて教え...
-
エクセルVBAで開いているファイ...
-
vbsでExcelのシートをコピーす...
-
ファイルサーバ上のファイルが...
-
エクセルのハイパーリンクがコ...
-
VB6でExcelシートのコピー、貼付け
-
パワポでスライドをコピーでき...
-
LAN接続HDD(LinkStation)で削...
-
ワード 一部のページだけをpdf...
-
エクセルVBAでVBAの修正は出...
-
エクセルのマクロについて教え...
-
VB6でのファイルコピーの終了検...
-
外付けHDDのファイルの読み込み...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
エクセルのハイパーリンクがコ...
-
バッチファイル XCOPYで上書き...
-
バッチファイル 別ファイルにリ...
-
frxファイルの役目
-
ファイルサーバ上のファイルが...
-
バッチファイルのコピーで
-
Vba初心者です。下記のコード助...
-
xcopyでのバッチコピー方法でコ...
-
同じファイル名 上書きしないフ...
-
エクセルVBAで開いているファイ...
-
エクセル2010、図が大きすぎま...
-
vbsでExcelのシートをコピーす...
-
アクセス クエリを別のファイ...
-
bat 同名ファイルコピー時にリ...
-
[エクセル]コピーするとオブジ...
-
ワード 一部のページだけをpdf...
-
パワポでスライドをコピーでき...
-
FSO.CopyFileでのエラー無視方法
-
VBSで作成したフォルダにファイ...
おすすめ情報