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」の動作確認です。
確認した内容
次のコードを含む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‘: ファイル名または番号が不正です。」

Nameの実行時:「実行時エラー ’5 ‘: プロシージャの呼び出し、または引数が不正です。」

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

以上、Excel VBAでOneDrive上のファイルをコピー、名前変更、削除の動作確認でした。
OneDrive上のファイルに対して、FileSystemObjectも適切に動作しないため、ファイル名変更や削除は手間となります。
その他のエラー含め、OneDrive上のファイル操作に関するエラー事例と対応は以下にまとめています。