[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ファイル移動時に同名ファイルは上書きしたい(VBA)』(KUKI)
デスクトップ上に2つのフォルダTEST1とTEST2があります。 TEST1のフォルダは移動元のフォルダです。 TEST2のフォルダは移動先のフォルダです。
TEST1の中身は AAA-xxxx.xlsx BBB-xxxx.xlsx CCC-xxxx.xlsx
と言った感じでファイルが入っています。
TEST2の中身は AAA BBB CCC
といった感じでフォルダが入っています。
TEST1に入っているファイルの先頭3文字を検索してTEST2の該当フォルダに移動させる ということをやっているのですが、TEST2の中に同じ名前のファイルがあった場合に 「すでに同名のファイルが入っています」みたいなエラーメッセージがでてしまいます。 同名のファイルがあった場合に上書きしたいのですが、どうもやり方が分かりません。 Dir関数で同名のファイルがあるか確認してあった時にそのファイルを削除してから 移動させる方法はあるかと思うのですが、上書きする方法があるのかなと思いまして 質問致しました。
どうぞよろしくお願い致しますm(__)m
Option Explicit
Sub Sample1() Dim FolnameS As String Dim Folname As String Dim File_Collection As Object Dim File_List As Variant
Folname = "C:\Users\xxxxx\Desktop\TEST1"
Set File_Collection = CreateObject("Scripting.FileSystemObject").GetFolder(Folname).Files
For Each File_List In File_Collection Select Case Left(File_List.Name, 3) Case "AAA" FolnameS = "C:\Users\xxxxx\Desktop\TEST2\AAA\" & File_List.Name Name File_List.Path As FolnameS Case "BBB" FolnameS = "C:\Users\xxxxx\Desktop\TEST2\BBB\" & File_List.Name Name File_List.Path As FolnameS Case "CCC" FolnameS = "C:\Users\xxxxx\Desktop\TEST2\CCC\" & File_List.Name Name File_List.Path As FolnameS Case Else End Select Next Set File_Collection = Nothing End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
FSO を使っておられるわけですから、FSOのMoveFileを使ってもいいかとは思いますが、それはさておき。 乱暴ですが、いちばん手っ取り早いのは Name の直前で
On Error Resume Next Kill 新ファイルのフルパス On Error Goto 0
ところで、C:\Users\xxxxx\Desktop\ の部分ですが、ここをマクロ内でハードコーディングしますと 別PCで動かなくなります。(xxxxxはPCのWindowログインIDですから)
なので、以下のようなものを使って、動的に取得します。
Dim DeskTopPath as String DeskTopPath = CreateObject("WScript.Shell").SpecialFolders("DeskTop")
で、各コードは
●●● = DeskTopPath & "\TEST2\AAA\ & □□□
(β) 2015/07/06(月) 10:49
(β)さん ありがとうございます!
>On Error Resume Next >Kill 新ファイルのフルパス >On Error Goto 0
このコードはSubプロシージャの頭とお尻につけておけばよいものなのでしょうか? (KUKI) 2015/07/06(月) 11:33
>> このコードはSubプロシージャの頭とお尻につけておけばよいものなのでしょうか?
できるかできないかというポイントで答えると、頭とおしりで、処理はできます。 ですが、私はそうしませんし、絶対に、そうやってもらいたくありません。
On Error Resume Next を記述すると、そのあと解消するまで、「バグを含めたすべてのエラー」が エラーでとまることなく、スキップされながら最後まで進んでしまいます。 そうすると、プログラムバグの存在がわからないまま、一見、正常終了したように見えてしまいます。
これは、データがない場合は、エラーになる といった明確なものがあって、そこに的をしぼって エラーバイパス。これがまっとうな方法でしょうね。
(β) 2015/07/06(月) 13:10
(β)さん
理解できました! 詳しく教えていただきありがとうございましたm(__)m
(KUKI) 2015/07/06(月) 13:37
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.