| すぐマク YNxv919 | Home | Search | Contents | Gallery | Introduction | Service | Support | What's New! |
| サーバーのブックが開かれているかを調べるには? |
|
|
|||
|
ほかの人と共同で使用するブックは、サーバーに格納しておくか、ネットワークコンピュータの共有フォルダなどに格納しておきます。 そうしておけば、そのネットワークに接続できる人は、そこに格納されているブックを自身のパソコンで開くことが可能になります。しかし、ほかの人が先に開いていると、読み取り専用としてしか開けません。 ![]() この場合は、左図のようなダイアログボックスが表示され、そのファイルが使用中であることと、誰が使っているのかを知ることができます。 そして、[読み取り専用] または [通知] ボタンのどちらかをクリックすれば、そのブックを開くことが可能です。 どちらのボタンをクリックしても、ブックは読み取り専用で開かれます。もしも、開いたブックの内容を編集(変更)したいのであれば、[通知]ボタンをクリックします。 ![]() そうすると、ほかの人がそのブックを閉じると、右図のようなダイアログボックスが表示されるので、必要な編集を行って上書き保存することが可能になります。 しかし、ご質問は、こうした手順によるのではなく、ブックがすでに開かれているかどうかを調べる方法を知りたいという希望です。これについて、Excel VBA Board (掲示板) にて活発な応答が行われました。そして最終的に、すばらしい回答が提供されました。ご本人の承諾のもとに、下記のとおり掲載させていただきます。 |
|
|||
ブックを開く→ブックのReadOnlyプロパティを取得する→Trueならば他で開かれている、Falseならば他で開かれていないと判断できます。
With Workbooks.Open("***.xls")
If .ReadOnly Then .Close False
End With
上図の「ファイル使用可能」ダイアログボックスは、先にブックを開いていた人がそのブックを閉じると、後で開いていた人の画面に表示されるものですが、Excel は実際には定期的にチェックしているようなので、ちょっと遅れて表示されます。また、これを非表示にするのはちょっと厄介ですね。
(この部分の文章は、この頁内の連続性を保つため Y.Nagaiが加筆しました)
|
|
|||
|
ムラジロ〜さんのマクロを実行してみると、他の人がブックを開いていても「使用中のファイル」ダイアログボックスが表示されることなく、処理が進むことが分かります。このサンプルではブックを閉じるだけにとどめていますが当然、その後に任意の処理を行うことが可能です。 なお、マクロコードの 1行目の *** の部分にはブック名を記入します。そこにはパスを含めることができますから、ネットワークドライブの割り当てがしてある場合には、そのドライブ番号を使って次のように書くことができます。下例ではドライブ番号に E、フォルダ名に A、ブック名に DB を指定しています。
With Workbooks.Open("E:\A\DB.xls")
ネットワークドライブの割り当てがしてない場合には、次のように書き表わします。下例ではサーバー名を Server1 と仮定し、フォルダ名とブック名は上例と同じです。
With Workbooks.Open("\\Server1\A\DB.xls")
Excel VBA Boardで参加していただいた皆様、ありがとうございました。【参考ページ】 サーバーのブックを利用状況に合わせて開く |
| http://www.geocities.jp/happy_ngi/ | Home | Contents | Gallery | Introduction | Service | Support | What's New! |