VBAでファイルのコピーをしてみる

メールに添付されて送られてきたPDFファイルを、ファイル名をそのままで一つ、少々加工して一つ、合わせて二つPCに保存、という作業を日々行っている。元のファイル名は、「種別」+「番号(4桁の数字)」+「名前」+「日付(8桁の数字)」という形式だが、ファイル名の加工は、元から「種別」と「名前」を取り除き、10桁の数字だけにする。一日に十数件あることもあるので、けっこう面倒くさい。

ある時、エクセルのVBAでファイルの保存、コピー、ファイル名の変更などもできることを見かけた。PDFファイルの保存作業には、エクセルは全く関わらないが、VBAを使えばワンクリックでできるのではないか、と考え、作ってみたのが下記のマクロ。

 

 

Sub FileCopipe()

 

Dim buf As String

Dim buf2 As String

Dim letter As String

Dim n As Long

 

‘ メールで送られてきたPDFファイルをそのままの名前で保存する場所。とりあえず、Documentsの下のFFという名前のフォルダに入れることにする。

Const Path As String = "C:\Users\XXX\Documents \FF\"

 

‘ FFに保存したファイルの名前をbufに文字列で入れる。

buf = Dir(Path & "*.pdf")

 

‘ 数字だけのファイル名を作るための変数

buf2 = ""

 

‘ FFに保存したファイルの名前から、数字だけを取り出し、buf2に入れる

For n = 1 To Len(buf)

 

    letter = Mid(buf, n, 1)

 

    If IsNumeric(letter) = True Then

 

        buf2 = buf2 & letter

 

    End If

 

Next

 

‘ buf2に ”.pdf” を加える

buf2 = buf2 & ".pdf"

 

‘ ファイルを別のフォルダ(FN)にコピーする。この時は、ファイル名はそのまま。

FileCopy " C:\Users\XXX\Documents \FF\" & buf, "C:\Users\XXXX \Documents\FN\" & buf

 

‘ ファイル名を変更して、別のフォルダ(NN)に移動する。

 

Name "C:\Users\XXXX\Documents\FF\" & buf As "C:\Users\ Documents\NN\" & buf2

 

End Sub

 

どうしてファイルをFFに残さないかというと、作業はFF内にあるファイルを対象にする。ファイルが残っていると、同じ作業をまたしてしまい、NNやFNに同じファイルがあることになり、「上書きする?」などということを聞いてくるかもしれないから。作業は、1ファイルずつ行うことを前提にしている。