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ファイルずつ行うことを前提にしている。