shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel VBA】OneDrive上のファイルをコピー、名前変更、削除の動作確認

VBAでOneDriveやSharePointにあるファイルをコピー、名前変更、削除の動作確認の備忘録です。ファイルパスがURL形式のとき、「Open・Save・SaveAs・Close」のメソッドは動作しましたが「FileCopy・Name・Kill」はエラーとなりました。

内容:

動作確認のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2501)です。

確認の背景

OneDriveやSharePointにあるファイルは、ファイルパスがURL形式となります。そのため、Dir関数やFileSystemObjectでは適切に動作しないことがあります。

過去に次のとおり、「Open・Save・SaveAs・Close」の動作確認をしたので、今回は「FileCopy・Name・Kill」の動作確認です。

shikumika.org

確認した内容

次のコードを含むExcelファイルについて、OneDriveと同期したフォルダ、同期していないフォルダで実行します。

マクロの動作内容の概略は以下です。

・マクロがあるフォルダに新しいファイルを作成

・ファイルのコピー

・ファイルの名前の変更

・ファイルの削除

Sub ファイルコピーと名前変更と削除のテスト()
    '現在のマクロがあるフォルダパスを取得'
    folderPath = ThisWorkbook.Path & "\"
    
    '新しいExcelファイル「テストファイルA」を作成'
    Dim newWorkbook As Workbook
    Set newWorkbook = Workbooks.Add
    newWorkbook.SaveAs folderPath & "テストファイルA.xlsx"
    
    'フルパスを取得'
    修正前フルネーム = newWorkbook.FullName
    '名前を「テストファイルA」から「テストファイルB」に変更'
    修正後フルネーム = Replace(修正前フルネーム, "テストファイルA", "テストファイルB")
    newWorkbook.Close
    
    '「テストファイルA」をコピーして「テストファイルB」を作成し、削除'
    FileCopy 修正前フルネーム, 修正後フルネーム
    Kill 修正後フルネーム
       
    'ファイル名を「テストファイルA」から「テストファイルB」に変更し、元に戻す'
    Name 修正前フルネーム As 修正後フルネーム
    Name 修正後フルネーム As 修正前フルネーム '変更を元に戻す'
    
    '「テストファイルA」を削除'
    Kill 修正前フルネーム
    
End Sub

実行の結果

冒頭に記載のとおり、OneDriveと同期していない場合は適切に実行されましたが、同期したフォルダでは「FileCopy・Name・Kill」でエラーとなりました。

なお、OneDriveと同期しているときに発生するエラー内容は次のとおりでした。

FileCopyの実行時:「実行時エラー ’52‘: ファイル名または番号が不正です。」

FileCopyで発生している

「実行時エラー ’52‘: ファイル名または番号が不正です。」の画面
Nameの実行時:「実行時エラー ’5 ‘: プロシージャの呼び出し、または引数が不正です。」

Nameの実行時に発生している

「実行時エラー ’5 ‘: プロシージャの呼び出し、または引数が不正です。」のエラー画面
Killの実行時:「実行時エラー ’53 ‘: ファイルが見つかりません。」

Killの実行時に発生している

「実行時エラー ’53 ‘: ファイルが見つかりません。」のエラー画面

以上、Excel VBAでOneDrive上のファイルをコピー、名前変更、削除の動作確認でした。

OneDrive上のファイルに対して、FileSystemObjectも適切に動作しないため、ファイル名変更や削除は手間となります。

その他のエラー含め、OneDrive上のファイル操作に関するエラー事例と対応は以下にまとめています。

shikumika.org