Excel VBA:FileCopyではエラーになる編集中のファイルをコピーするサンプルプログラム

Excel VBA:開かれているファイルをコピー(編集中のファイルをコピーする場合など)するサンプルプログラム

ExcelのVBAで開かれている(ロックされている)ファイルをコピーするサンプルプログラムを覚書。

例えば今開いている編集中のファイルなどをファイルを閉じずに別の場所にコピーしたい場合のVBAのサンプルプログラム。

ExcelのVBAでファイルをコピーする処理を実行する場合、”FileCopy”を使用しますが、コピー元が開かれている場合、”FileCopy”では「実行時エラー ’70’: 書込みできません。」というエラーメッセージが表示され、コピーが出来ません。

そういった場合でもコピーをできるようにするExcel VBAのサンプルプログラムを紹介します。

Excel VBAの”FileCopy”について

ExcelのVBAでファイルをコピーする際に使用する”FileCopy”は開かれているファイルをコピーすることはできません。

例えば、コピー元のファイルが開かれている状態で以下のようなプログラムを実行するとエラーメッセージが表示されてコードの実行が中止されます。

実行時に表示されるエラーメッセージ。

「実行時エラー '70': 書込みできません。」というエラーメッセージ

開かれているファイルでもコピーすることができるVBAのサンプルプログラム

コピー元ファイルが閉じている(使用されていない)ことを保証できない場合は、ExcelのVBAの”FileCopy”を使用せずに”Scripting.FileSystemObject”の”CopyFile” を使用します。

以下がそのサンプルプログラムです。

“Scripting.FileSystemObject”の”CopyFile” を使用すれば開かれているファイルでもコピーが可能です。

ちなみに上記サンプルプログラムでは、コピー先に同一名のファイルが有った場合は無条件に上書き保存されます。

コピー先に同一名のファイルが存在した場合の処理を追加したサンプルプログラム

ちょっとサンプルプログラムを変更して、コピー先に同一名のファイルが有った場合には上書き保存するかどうかユーザーに問い合わせるメッセージを表示させ、ユーザーの選択によって上書き保存するか処理を中止するかを判断して処理するようにしたサンプルプログラムです。

ExcelのVBAで開かれているファイルをコピーするサンプルプログラムまとめ

ExcelのVBAを使って開かれているファイルをコピーするサンプルプログラムを紹介しました。

サンプルプログラムでは触れていませんが、ファイルのコピーする際には色々考慮が必要です。

コピー元ファイルの存在チェック、コピー先に同一名のファイル名のファイルの有無チェック、コピー先に同一名のファイルが存在し、かつそのファイルが開かれているかどうかなど、想定できるケースについてそれぞれ必要な処理を用意する必要があります。