社内で共有ファイルが使用中であるとき、みなさんはどのような対応をしていますか?
この記事では、社内で共有しているExcelファイルが「使用中」になり、編集できない場合の解決策を紹介します。
共有Excelファイルが「使用中」となっていたときの今後の行動が変わるかもしれません。
Excelをもっと使いたおすために
この記事ではExcelのかいつまんだ機能について紹介していますが、Excelをもっと使いたおすための効果的な学習方法については以下にまとめています。ご参照ください。
背景的な話
社内LAN上で複数人・複数部署でExcelファイルを共有するという状況は、Googleスプレッドシートなどが広く普及してきた現在でも多く存在するのではないでしょうか。
そんな環境でよく起こるのが「誰かがファイルを使用中」という状況です。
具体的に説明すると、例えば部署Aと部署Bで共有しているExcel管理表があるとします。
どれだけ技術が進んでもこのようなExcel管理表はなくならないものですね。
部署AのX君がこのExcelファイルを開いているときに、部署BのYさんが同一ファイルを開こうとすると、下記のようなメッセージが出て、読み取り専用でしか開くことができないとします。
ちなみにここで「通知」をクリックしておくと、相手が閉じたタイミングで「編集できます」というメッセージが出ます。このメッセージに対して「編集する」をクリックすると読み取り専用モードから編集モードに切り替わり、編集可能になります。
このようなときにどうするかという話になったとき、いくつか考えられる選択肢をここではまとめています。
ちなみに私の会社ではWindowsログオン管理にICカード認証+シングルサインオン方式を採用しており、社内のActive Directoryドメイン環境にてクライアント端末はドメインに参加、そしてユーザは1つしか用意していないという少し変わった環境です。なので全部署のスタッフは同一ユーザでWindowsへログインしている状態となり、誰かが共有Excelファイルを開いていると「使用者は○○です」の”○○”の部分も全く同じということになります。このような人一倍困った環境での対応方法も4あたりに書いてます。
1.ユーザに連絡する
とりあえず、メッセージからユーザ名を判別できるような場合はその部署に電話して「すぐに使用したいので一旦閉じてください」などとお願いする、というのが一番最初にとるべき手順でしょう。原始的ですが。
2.サーバを操作して閉じる
ただ、電話しても「え?今はファイル開いてないけど…」という返事がくることもあると思います。これはクライアント側でファイルを閉じた際に、ファイルサーバ側ではプロセスを正常終了しきれずにプロセスが残っているという状態が考えられます。
このようなときは、ファイルサーバを操作して「コンピュータの管理」→「共有」→「開いているファイル」→「開いているファイルを閉じる」とすることで残ったプロセスをきちんと終了させることができます。
3.リモートデスクトップでサーバを操作して閉じる
「でもサーバー室まで行くの面倒だし…」という場合は、もちろん下記コマンドによりリモートデスクトップでサーバにアクセスして、上記の手順を踏むということも可能です。私も最初の頃はよくしていました。
mstsc
では、リモート操作するにしろサーバ室まで足を運ぶにしろ、わざわざサーバーをGUIで操作しないとできないことなでしょうか?
4.クライアントのコマンドプロンプトから操作する
実はクライアントのコマンドプロンプトからだけでもサーバ側の「開いているファイルを閉じる」という操作は可能です。
openfilesというコマンドを使っていきます。
openfiles /query /s sampleserver001
/s の後ろにあるのはファイルサーバの名前です。ここでは「sampleserver001」としていますが、適宜書き換えてください。
これでファイルサーバ上で現在開かれている共有ファイルの一覧が表示されます。
表示された共有ファイル一覧から閉じたいファイルのID(ここでは123456だったとします)を確認したら、今度は下記コマンドで強制的に閉じることができます。
openfiles /disconnect /s sampleserver001 /id 123456
/id の後ろにあるのは上記で調べたファイルのIDです。成功したら以下のようなメッセージが表示されます。
成功:開いているファイル "d:\sample\samplefile.xlsx"への接続は切断されました。
これでわざわざサーバーをGUIで操作しなくても、サーバ上で開かれているファイルを閉じることはできますね。
ただこれも、本当は使用者は閉じたつもりなのにサーバ側で正常終了しきれてなくてプロセスだけが残っているものか、それとも本当に使用中なのかまではわかりません。なのでこの終了方法も、電話確認などの行為が前提での話になるのかなとは思います。
少なくとも他部署から「この共有ファイルが今誰も開いているはずはないんだけど”使用中”になっちゃうから、サーバ側で閉じてもらっていい?」みたいな依頼が来たような場合は、このコマンドが役に立つことになるでしょう。
5.使用中しているユーザが全て同一の場合、どこで使用中かを知る方法
では少し話は変わりますが、各クライアントのWindowsログオンユーザーが例えば全員同じユーザだったら?
前述したとおり、私の職場の環境は実はこのような環境にあります。そのため使用中のファイルを開くと「使用者は○○です」とメッセージは一応でるものの、全員が同じユーザなのでどこの誰が開いているかわからず、2や3や4の方法で強制終了していいものかどうかも判断がしにくいわけです。(プロセスが残っているだけなのか本当にどこかの誰かが開いているのか、どちらかわからない…)
そこで、下記のようなVBA(とVBSの合わせ技)を書くことで、とりあえずはどこの誰が使用中(もしくは最後に使用してプロセスが残っているだけ)という状態を把握できるようにしました。
Private Sub Workbook_Open() Dim objNetWork If ActiveWorkbook.ReadOnly = False Then '読み取り専用ではない場合
'端末名取得 Set objNetWork = CreateObject("WScript.Network") ThisWorkbook.Sheets("使用端末").Cells(1, 1) = objNetWork.ComputerName Set objNetWork = Nothing '上書き保存 Application.DisplayAlerts = False ActiveWorkbook.Save Else '読み取り専用の場合 tname = ThisWorkbook.Sheets("使用端末").Cells(1, 1) MsgBox "端末名:" & tname & "が使用中" End If End Sub
詳しい説明は不要でしょう。ブックオープンのイベントで操作側の端末名を毎回保持させ、使用中である場合は「端末名:○○が使用中」と表示させる、といったコードになっています。
これなら一応端末の設置部署へ連絡して、ファイルを本当に使用中かそうでないかを確認できます。(使用中でなかったら2や3や4の方法で終了させることができます。)
他にも、「一定時間操作がなかったら自動的に閉じるVBA」とかでも短期間試験運用してみたりもしましたが、あまりユーザ側からいい評価が得られませんでした。
ということで、今のところこれが一番よい落としどころではないかと思ってます。
本ブログでは業務に役立つ技術情報をこれからも発信していきますので、困った時にはぜひ参考にしてみて下さいね。