VBA FileCopy の落とし穴


スポンサーリンク

VBA の FileCopy コマンドがエラーステータス 70 で失敗する。

ちなみに FileCopy で発生する エラーステータス、エラー番号は以下の通り。
ArgumentException 52 Source または Destination が無効であるか、指定されていません。
IOException 55 ファイルが既に開かれています。
FileNotFoundException 53 ファイルが存在していません。

それが70、つまりファイルを保存できません。

なんで?
VBAの FileCopy コマンドには欠点があって、
現在開いているシートのマクロではFileCopyできない。

う・・・

VBA FileCopy の落とし穴から抜け出す方法



ファイルシステムオブジェクトでコピーしちゃう。
こんな関数を作って呼び出せば使いまわせます。
Function FileCopy(strSrc, strDst)
    Dim fso         As Object   'ファイルシステムオブジェクト
    Dim errflg

    errflg = 0
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    On Error GoTo rsm
    fso.CopyFile strSrc, strDst
    On Error GoTo 0
    
    'オブジェクト変数のクリア
    Set fso = Nothing
    
    FileCopy = errflg
    Exit Function
rsm:
errflg = Err
Resume Next    
End Function

【関連情報】
以下の2つがファイルシステムオブジェクトのファイルコピー関連
fso.CopyFile
file.Copy

とりあえず、本記事では落とし穴から抜ける方法のみ。

スポンサーリンク

Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です