« ワイルドカードで検索してファイル名を取得 | トップページ | ファイルの名前を変更する »

2010年3月 5日 (金)

VBAでファイルを削除する

記事「ワイルドカードで検索してファイル名を取得
のなかのコードを改造してコピーしたファイルを削除します。

あるファイルに大きな変更を加える前とかに
変更前に戻れるように複製を作っておきます。
このようなことが何回かあると複製がたくさんになります。

上のような場合、ファイル単位のバックアップなんかは
そのファイルの複製を作って済ませたりします。

フォルダエクスプローラーで
あるファイルを選択して同じフォルダにコピーすると
「コピー 」が元のファイル名の前に足したファイル名になります。
2つ目、3つ目のファイルのコピーは、
「コピー (2)」「コピー (3)」と数字が付け足されます。
Vba20100305a

これを利用してコピーしたファイルを削除します。

具体的には、MyPathで指定したフォルダ内を
ワイルドカードを使って「コピー*」で検索して
検索条件を満たしたファイルを削除します。

削除するにはKillステートメントを使います。

記事「ワイルドカードで検索してファイル名を取得 」の中のコードでは
検索条件を満たしたファイルの名前をシートに書き出しました。
ここでは、この箇所を
Cells(i + 1, 1) = .FoundFiles(i)から

Kill .FoundFiles(i)

に替えます。

枠内のコードは、基本的に
Excelの標準モジュールにコピペして
そのまま実行できるようになっています。

Killステートメントは、
シートなどの削除と違って警告が出ません。
大事なファイルを削除しないよう気をつけてください。

下のコードでは念の為
Killステートメントの前に
Stopをつけてあります。

ワイルドカードで検索してファイル名を取得するコード:

Sub macro100305a()
'ファイルを削除する
    Dim MyPath, MyFile As String
    Dim i As Integer

    MyPath = "C:\Documents and Settings\" & _
        "あなたのユーザー名\My Documents\"
        'ファイルの有無を確認
        With Application.FileSearch
            .LookIn = MyPath
            .Filename = "コピー*"
            If .Execute() > 0 Then
                MsgBox .FoundFiles.count & _
                    " 個のファイルが見つかりました。"
                For i = 1 To .FoundFiles.count
                    Debug.Print .FoundFiles(i)
                    Stop
                    'Killは警告なくファイルを削除します。
                    '実行を続けるにはよく確認してください。
                    '念の為Stopしました。
                    '複製しておいたファイルを削除
                    Kill .FoundFiles(i)
                Next i
            Else
                MsgBox "検索条件を満たすファイルはありません。"
            End If
        End With
End Sub

くれぐれも
大事なファイルを削除しないよう気をつけてください。

|

« ワイルドカードで検索してファイル名を取得 | トップページ | ファイルの名前を変更する »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: VBAでファイルを削除する:

« ワイルドカードで検索してファイル名を取得 | トップページ | ファイルの名前を変更する »