[[20150706100917]] 『ファイル移動時に同名ファイルは上書きしたい(VB』(KUKI) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ファイル移動時に同名ファイルは上書きしたい(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.