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上のファイル操作に関するエラー事例と対応は以下にまとめています。