【エラー423】共有する為に~によってロックされています|PowerAutomate

このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています
  • URLをコピーしました!

「共有する為に~によってロックされています」を回避する方法

PowerAutomateでSharePointのドキュメント内のExcelに対して操作をする際にエラーが発生しました。

エラーを参照したところstatusは423でした。これは「ファイルがロックされている」時に出るエラーです。

PowerAutomateからオンラインのExcelに連続で作業を仕掛けることはできない様です。

Plat(プラット)

「一度Excelにアプローチした後は6分経過しないとロックが解けない」
と書いてあるサイトもありますね。ロックの解除はできない様です。

・・・困りました。仕様とはいえ6分待つのは嫌ですよね。抜け道がないのかと考えすぐに調査しました。

結論から申し上げますと運用でカバーすることで待ち時間無くフローを通す方法を見つけました。

関連記事

PowerAutomateではどんな仕組みで他のアプリケーションと情報をやり取りしているのか気になりませんか?

かんたんに理解できるように情報を整理してみました。

Excelに関するコネクタの中にある「スクリプトの実行」コネクタを使ってみました。

「HTTP要求を送信します」コネクタの概要や関連キーワードを説明している記事はこちらです。

関連書籍

今回のような書籍に載ってない情報を見つける為にはまず基礎的なスキルが必要です。

こちらは電子書籍です。私は電子書籍で購入しました。

皆様の作業環境にディスプレイが2枚(デュアルモニター)あればPC上で書籍を見ながら作業できますよ。

目次(リンク機能付き)

PowerAutometeとは

PowerAutomateはMicrosoftが提供しているPowerPlatfrmという製品ラインに属したアプリケーションです。

簡単に説明するとクラウド環境を利用して「アプリケーション間の作業を自動化」することができます。

Status423とは

Microsoftのドキュメントによると「アクセスしているリソースがロックされています」と表示されています。

私が用意したデータもOfficeスクリプトにより文字を記入した後にファイルをリネームするというフローです。

自分で作ったものと仕入れた情報の内容が一致するので原因は「ファイルのロック」だと特定しました。

エラーが発生した時の表示について

以下箇条書きは私が作ったフローでエラーの発生ポイントをピックアップしたものです。

  • ExcelOnlineの「スクリプトの実行」で指定したExcelに値を入力
  • ファイルをリネームするためにHTTPリクエストを送信
  • 取得した情報をもとにファイル名を書き換える

1番で対象のExcelにデータを書き込んだ後3番で同じExcelに操作を加えるところでエラーになります。

1回アクセスしたExcelにすぐ次の作業を仕掛けようとすると時限ロックが効いてしまう様です。

エラーで止まったフローを展開して下の方まで見ていくと「状態コード」という場所があります。

ここに423という表記があります。また画面右側にも実行の詳細という短冊状のウインドウが出てきます。

この中にあるエラーの詳細を見ると「共有する為に~によってロックされています」という表示があります。

画面の表示から見ても「Excelファイルがロックされている」ことが分かりますね。

Aさん

そもそもエラーの特定が大変そうですね。
エラーメッセージが分かりにくいです。

Plat(プラット)

エラーに対し的確なメッセージが用意されているケースは少ないです。
「メッセージは分かりにくいもの」だと思い諦めてください。
これは各種プログラミング言語に共通する内容です。

このようにエラーメッセージを追いかけるのは効率が悪いこともあります。

効率を上げるにはCopilotがおすすめです。必要に応じて試してみてください。

ご注意下さい:SharePointのチェックイン、チェックアウトでは解決しません

本事例はSharePointのチェックイン、チェックアウトでは解決しません

本事例をインターネットで検索するとSharePointのチェックイン/アウトの記事が見つかることがあります。

  • チェックイン ・・・ 他のユーザーの編集を可能にします
  • チェックアウト ・・・ 他のユーザーの編集を不可能にします(ロック)します

おそらくチェックアウトに出てくる「ロック」というキーワードで表示されてしまうと予測しています。

機能(アクション)としては本件と似ているのですが対策内容は異なります。ご注意ください。

対策は「ファイルのコピー」

基本的には共有が解けるまで待つしかないです。Googleなどで検索しても「6分待つ」が主流です。

具体例を挙げるとコントロールというコネクタのDountilを使ってループを組み6分やり過ごすという方法です。

しかし私は待ちたくないので試行錯誤の末解決策を見つけました。「ファイルをコピーする」という方法です。

フローがイメージできるように画像と作業手順を用意してみました。

フォルダー内のファイルをコピーしてしまえば次の手をうつことができます。
作業手順はこちら
STEP
原紙ファイルに対して最初の指示を行う

私の事例ではここでOfficeスクリプトによる「スクリプトの実行」を配置しました。

STEP
原紙ファイルを別の場所にコピペ

別のフォルダにSTEP1で使った原紙ファイルをコピーして貼り付けます。

STEP
コピペで用意されたExcelファイルに次の指示をする

私の事例ではここでファイル名を変更(リネーム)しています。

この方法を使えばOfficeスクリプトでデータを書き込んだ後のExcelファイルもリネームすることができます。

作業後の原紙ファイルは破棄せず上書きして使うことでずっと原紙ファイルとして使うことができます。

手作業の中から思いついた「対策」

手作業でExcelファイルの名前を変える作業をした時に原本をとっておこうと考えファイルをコピーしました。

なんとなくですがこの時に「コピーが使えるかもしれない」と思いついたのがきっかけです。

幸いSharePointには「ファイルのコピー」というフローが用意されているので選択して使ってみました。

試してみたところ思った通りでした。スクリプトの実行後でもファイルをコピーする事ができました。

Plat(プラット)

「多分できるかも」と思ったらトライしてみましょう。
できなかったとしてもダメな選択肢を1つ減らすことができます。
検証作業は必ず仕事を前に進めてくれるのでコツコツやってください。

Excelファイルはコピーすると新規ファイル扱いになる

次はコピー後のファイルに対しリネームのフローが通るのかを確認しました。

フローを作成し確認してみるとエラー通知は出ません。あっさり指示が通ります。

状態から予測するとコピーしたファイルは新規扱いになる様ですね。

これでスクリプトを実行したあとのExcelファイルに新しい名前を登録するという作業が完了しました。

手順としては画像のようなフローを組むことでエラーを回避することができました。

参考:「パスによるファイルメタデータの取得」について

この操作をフローに組み込んだのは理由があります。コピー対象のExcelの拡張子が.xlsmだった為です。

ファイルの拡張子(形式)が.xlsmの時はフローがファイルを認識しないことがあります。

そんな時はメタデータの取得でデータを捕まえるという作業を追加すると解決します。

参考:「ファイルの保存」は「コピー」に置き換えられる予定です

お知らせ(英語のサイトへリンクしています)

2024/07/08時点の情報です。オンラインのExcelには「名前を付けて保存」が無くなる様です。

コピーすることで新規ブックを作成するというかたちになりそうですね。

「原紙ファイルへのアプローチが6分以内だとエラーになるのか」を検証する

1つのフローの中で作業を通すことができたのですが同時に不安も出てきました。

権限がオープンでグループによる共同編集が可能なExcelに対してフローを用意できるのかという心配です。

原紙のExcelファイルに対し6分以内に複数の指示が到達したらどうなるのか」と考えました。

資料や活用事例を調べてもピンポイントの回答を見つけられなかったので実際に試す事にしました。

Aさん

実際にフローを作ってみないと分からない内容ですね。

Plat(プラット)

試す前は予想もつかないので結果も全く分かりませんでした。
このケースも検証することで一定の結果を得る事ができました。

検証結果:フロー内でエラーが出なければフロー間でもエラーは出なかった

用意したフローに対して6分以内に複数回操作指示が入った時にどうなるのかを検証しました。

具体的な操作としては約1分おきに用意したフローが発動するようなテストを3回行いました。

結論から申し上げますと競った時間でフローが走っても(トリガーが引かれても)全く問題ない様です。

結論としては「1つのフローの中にある特定のファイルに対して6分以内に複数回のアクセスはエラーになる」という事が分かりました。

トリガーを引いた時間が速い処理から順にエラーなく仕事をこなしてくれることを確認しました。

Plat(プラット)

PowerAutomateは開発環境(概念)を把握するのが非常に難しいです。
作業がイメージできない時は実際に試してみることをおすすめします。

参考:ExcelOnlineには「ブックを閉じる」がない

Officeスクリプトにはブックを閉じるという指示がないです

不具合に対する対策を考える際に単純に「ブックを閉じる」事ができれば解決すると思っていました。

私ExcelVBAを使います。WorkbookオブジェクトのCloseメソッドのような指示ができれば良いと考えました。

ブックを閉じてしまえばロックというステータスが消えるのではと考えた為です。しかし甘かった様です。

OnlineのExcelは自動保存など管理面では非常に便利です。

ブックを閉じる(終了する)などのオンオフ機能が充実してくるとより使いやすくなりそうですね。

最終結論

現状status423に対するエラー回避としてできることは2つという結論に達しました。

  • ファイルをコピーする
  • フロー内でループを用意して6分前後待つ
Plat(プラット)

基本的は1番の処理で対応しましょう。
6分待たなくて良いのは非常に大きな成果です。

まとめ

今回はエラーの詳細と対策を紹介しました。

比較的新しいアプリケーションですのでユーザーインターフェース含め仕様が頻繁に変わります。

よって今回の事例もアプリのアップデート(バージョンアップ)により解決する可能性があります。

条件としては「現状できる対策」という捉え方をしてください。

加えて本事例はほかの事例にもフィードバックできる可能性がある内容です。

例えばOneDriveに格納されたExcelにも同じ対応ができるのではと思っています。

今回はエラーからのリカバリーでいろいろな思いつきがあったり様々な検証ができました。

このように失敗から生まれるものもあります。失敗は何かのメッセージだと思って改善に取り組みましょう。

よかったらシェアしてください!
  • URLをコピーしました!