• ベストアンサー

エクセルVBAで「通知」を選ぶには?

ネットワーク上にあるエクセルファイルを開こうとする場合、誰かが先に開いている場合、「使用中のファイル」というダイアログが出てきて、「xxx.xlsは編集のためロックされています」とメッセージが表示され、ボタンが「読み取り専用」「通知」「キャンセル」と出ます。 通知を選ぶと読み取り専用で開かれ、先に開いた人が終了した場合、OKになった旨の連絡がきます。 この「通知」を選ぶのと同様の操作をVBAで行うにはどのような命令を行ったらよいのでしょうか? 要は「読み取り専用」で開いて、先に開いた人が閉じた場合、メッセージを出したいのですが、どのようにVBAを作ったらよいのでしょうか? よろしくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんなのではどうでしょう? >先に開いた人が閉じた場合、メッセージを出したいのです という質問に対する回答ではないのですが・・・ 普通にVBAで Workbooks.Open ファイル で開くと「通知」を選んだ時と同じく読み取り専用で開きます。 先に開いた物を閉じると、「xxx.xlsは編集できるようになりました。どうする?編集?キャンセル?」と表示します。 ただ、VBAからだと「xxx.xlsは編集のためロックされています」とメッセージが表示されません。 自前で開いて判定してメッセージを出します。 編集できるようになった時の処理はシステムに任せます。 Sub sample() Dim file As String file = "\\fumufumu\hoge\Book1.xls" 'ファイル Dim wb As Workbook Set wb = Workbooks.Open(file) If wb.ReadOnly = True Then 'もしも読み取り専用だったら If (GetAttr(file) And vbReadOnly) = 0 Then 'でもファイル属性は読み取り専用じゃなかったら MsgBox "誰か先に使ってるみたいです。" & vbCrLf & "使えるようになったら通知します。", , "使用中のファイル" End If End If End Sub 同じ事なんですが Private Sub sample() Dim file As String file = "\\fumufumu\hoge\Book1.xls" Workbooks.Open file If Workbooks(Mid(file, InStrRev(file, "\") + 1)).ReadOnly = True Then 'もしも読み取り専用だったら If (GetAttr(file) And vbReadOnly) = 0 Then 'でもファイル属性は読み取り専用じゃなかったら MsgBox "誰か先に使ってるみたいです。" & vbCrLf & "使えるようになったら通知します。", , "使用中のファイル" End If End If End Sub

believe_me
質問者

お礼

回答ありがとうございます。 「xxx.xlsは編集のためロックされています」が出なかったので、てっきりメッセージが返って来ないものと思い込んでいました。 今日職場で試してみたところ、メッセージが返って来ることを確認しました。 欲を言うと、誰が使っているか知りたいのですが、VBAからは無理なようですね。 コマンドラインか何かで外部的にエクセルを立ち上げて、誰が使っているか表示するようなことはできないでしょうか? とりあえず現在は、誰かが使っている時は、そのまま使うか、または一旦該当ブックを閉じ、該当のフォルダを開くエクスプローラを起動して、通常の開き方を選べるようにしています。

その他の回答 (2)

回答No.3

>欲を言うと、誰が使っているか知りたいのですが、VBAからは無理なようですね。 http://homepage2.nifty.com/kmado/ke_m11.htm の「ネットワーク上のブックを開いているユーザー名を得る」 これは、ダイアログの「使用者は???」というメッセージをつかまえて???の部分を表示しているようです。 また、開くときに、 Workbooks.Open(Filename:="\\??\??.xls", Notify:=False) で開くと、誰かが使っていると、誰が開いているか表示します。 でも、開くかどうかを選択するダイアログが出てしまいますが・・・ Excelは「使用者は???」と表示しているので、何か調べる方法はあるんじゃないかと思います。 でも、わかりませんでしたが・・・

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

本来の機能で「通知」が出る体制になっているのに、ユーザー側(VBAの実行側)でそれを出せるとして、出すと両方が出す羽目になるのでは。だからシステム側を(待機状態を)抑止しないとならないが、そこまでユーザーがやるべきでなく、やらしてくれないように思うが。>先に開いた人が終了した場合、は事実の問題だから、なぜVBA側が乗り出すのか。 素人ながら疑問を呈します。 具体的にそれが必要なケースはどんなものか、補足しておいたらどうですか?

believe_me
質問者

補足

回答ありがとうございます。 職場での伝達文書、設計書などの9割方はエクセルファイルです。 ノーツのメールでショートカットで送られてきて、エクセルファイル本体はネットワーク上にある複数台の様々なフォルダに保管されています。 文書の忘備録のようなものをエクセルで作っています。 具体的には該当文書を開いている時に、プルダウンメニューに組み込まれたVBA「資料の場所を記録」を実行すると、開いているエクセルファイルの場所を忘備録(これもエクセルファイル)に書込みます。 忘備録は3列になっていて、ファイル名、フルパス名、登録日を登録します。 忘備録の該当行を選らんでプルダウンメニュー「該当ファイルを開く」を実行すると、該当ファイルを開きます。 VBAは常に実行しているわけでなく、プルダウンメニューの「記録する」「開く」を実行する時だけです。 そして「開く時」に、通常のファイルメニューからと同様の機能で開きたいのです。(誰がが先に開いている場合の機能) 参考までに・・・ この忘備録は色々な機能を持たせています。 ネットワークはかなり大規模でノーツユーザーは数千人です。 サーバーは数十台です。 現在忘備録は400行以上になっています。 エクセルだけでなく、ワードなど登録可能です。 開く場合、適切なアプリを立ち上げて開きます。 フォルダの場合はエクスプローラを立ち上げて該当のフォルダを開きます。 ファイルを開く場合、読み取り専用と編集可能に分けて開けます。 行の移動、削除もメニュー化しています。 ノーツメールでエクセル本体が添付で来ている場合、Cドライブに保管します。 削除する場合、Cドライブにファイルがある場合、オプションで同時に消すことも可能です。 忘備録に登録する際、既に登録済みの場合、その旨のメッセージを出し、忘備録の最後に移動するか確認します。 忘備録の最後の方に近日中に登録されたもの、及び重要なものを持ってくるようにしています。

関連するQ&A

  • 共有しているエクセルファイルをOffce2003で開こうとすると他で開いていないのに読み取り専用になってしまいます。

    MS VistaでOffice2003Proを使用しています。 MS Windows2000 Serverでエクセルのファイルを共有しているのですが、他のPCで開いていないのにも関わらず、「xxx.xlsは編集のためロックされています。使用中は'xxx'です。[読み取り専用]で開くか、または、読み取り専用で開き、ほかの人がファイルの使用を終了したときに通知を受け取るには、[通知]をクリックします。」と出てしまいます。 毎回ではなく、頻繁にでます。また、すべてのファイルではなく、特定のファイルです。これらのファイルに共通していることは、VBAでマクロが組んであります。 ご回答よろしくお願いいたします。l

  • Excel VBA で困っています。

    Excel VBA で困っています。 下記のプログラムで、「名前を付けて保存」→「キャンセル」 を選択した場合のエラーは回避できたのですが、 「名前を付けて保存」→「保存」→「同じ名前のファイルが既に ありますが置き換えますか?」→「いいえ(またはキャンセル)」 の時にエラーが出てしまいます。 どう直したら良いでしょうか。 よろしくお願いいたします。 Public Sub SaveBook() Dim myBook As Variant '「名前を付けて保存」ダイアログ myBook = Application.GetSaveAsFilename("test.xls", _ "Excelファイル,*.xls", , "Excelブックを保存") 'キャンセル時の処理 If StrConv(myBook, vbUpperCase) = "FALSE" Then Exit Sub 'ブックの保存 ActiveWorkbook.SaveAs Filename:=myBook End Sub

  • エクセルの上書き保存でエラーがでます

    上書き保存の際、次の二つのエラーが別々のファイルで出ます。 普通に上書き保存が出来る方法を教えて下さい。 ●「~.XLS」への変更は、共有違反のため保存できませんでした。別のファイルに保存しなおしてください。 ●「~.XLS」は、読み取り専用です。「~.XLS」を保存するには、OKをクリックし、名前をつけて保存ダイアログボックスで新しい名前を保存してください。  次の画面↓ 使用中のファイルへは編集のためロックされています。使用者は~です。読み取り専用で開くかまたは、読み取り専用で開き他の人がファイルの使用を終了したときに通知を受け取るには「通知」をクリックします。 と表示されます。どうぞよろしくお願いいたします。

  • エクセルが編集できなくなった

    PCを起動してxlsファイルを開き編集して保存はできるのですが、2度目に開く時に 「ファイルは使用中です」 の小窓が出てきます 再起動すれば同じように1回目だけ編集、保存ができます 詳細は ファイルは使用中です ○×.xlsは現在、 △△ によって編集されています。編集する必要がある場合は、[通知]を選択すると、ファイルが保存されたときに編集が可能になったことを知らせるメッセージが表示されます。 右に読み取り専用、通知、キャンセルの3つのボタンがでてきます 通知、で開いても読み取り専用になってしまいます 昨日まで大丈夫でした お助け下さい WINXP、EXCEL97、VAIORX63

  • エクセルVBAについて

    エクセルVBAの名前を付けて保存について質問です。 名前を付けて保存するとき、保存先に同じ名前のファイルがあると 「この場所に○○というファイルがありますが置き換えますか?」 と表示され「いいえ」もしくは「キャンセル」を選択すると実行時 エラーが表示されます。 キャンセルしてもエラーが出ないような構文を書きたいのですが わかりません。 もし知っている方がいるようでしたら教えてください。 Dim MySavePath As String MySavePath = Application.GetSaveAsFilename(Date, "Excel ファイル (*.xls), *.xls") If MySavePath <> "False" Then ThisWorkbook.SaveAs MySavePath & ".xls" End If

  • エクセルが開けません。

    フロッピーにおとしていたExcelのファイルが開けられません。XXX名前.xlsにアクセスできません。ファイルは読み取り専用であるか?または読み取り専用の場所にアクセスしようとしています。 またはサ-バ-上に保存されているドキュメントから応答がありません。 と言う、警告ダイアログボックスが出て開けられません。 大事なファイルのため、救済方法を教えてください。

  • エクセル・VBA エラーメッセージの表示をしたい

    お世話になります。 エクセルのVBAで、他のエクセルファイルを開き、そのファイルに新しいデータをペーストし保存して閉じる命令文を入れてあります。このファイルは共有ドライブに入っており、複数の人で共有しております。 ファイルをマニュアルで開こうとした時に、すでに他の人が開いていると、"使用中のファイル"というメッセージが現れるのですが、VBAでは何も聞かれず"読み取り専用"として開かれ、そのファイルにデータをペーストして閉じてしまいます。当然後から開くとそのファイルには新しいデータが存在しておりません。 このような場合に、MsgBoxを開かせて他の人が開いていることを知らせ、Exit Subをしたいのですが、どのように書けばよろしいのでしょうか? よろしくお願いいたします。

  • EXCELのVBAでの保存方法

    EXCELで以下のように記述したところ、 「ファイルを置き換えますか」のメッセージの後に 「いいえ」か「キャンセル」を選択すると 「400」というエラーメッセージが表示されます。 「いいえ」か「キャンセル」を選択した場合は、 エラーメッセージを表示させずに、 特定のシートのセルA1にカーソルを移動させたいのですが、可能でしょうか? ご指導よろしくお願いします。 ________________________ FileA = Application.GetSaveAsFilename( _ InitialFilename:="C:\test.xls", _ fileFilter:="XLSファイル (*.xls), *.xls") ActiveWorkbook.SaveAs Filename:=FileA ________________________

  • ワードで編集中のメッセージ

    ワードのファイルを開こうとすると”使用中のファイルは編集中のためロックされています。読取専用で開くか又は読取専用で開き、他の人がファイルの使用を終了したときに通知を受けるには通知をクリックします”というメッセージと読取専用、通知、キャンセルというボタンがでてファイルを開くことができず、困っています。どうすれば直るでしょうか?また、これはどうしてこのようなことになってしまったのでしょうか?

  • 自分のExcelを読み取り専用で開くVBAは?

    Excel2003を使っています。 基本的なことで恐縮なのですが、 Excelファイルを手動で開くとき、読み取り専用にするような方法はないでしょうか。 ファイルのプロパティから「読み取り専用」にチェックを入れても NASの性質なのか、チェックが外れてしまいます。 (前提として、ここの変更は考えていません) そこで、「読み取り専用を推奨する」にしたのですが、毎回メッセージボックスが出るため 「読み取り専用にしない」を選択される場合もあります。 そのため、VBAにその指示を書き込む方法を探していました。 たとえば、以下のコードを試してみました。 しかし、開いたファイルに指示しているため、当然ながら以下のメッセージが出ます。 "***.xls は既に開いています。2重に開くと、これまでの変更内容は破棄されます。***.xls を開きますか?" Private Sub Workbook_Open() Dim Filename As String Filename = ThisWorkbook.FullName With Workbooks.Open(Filename, , True) .ActiveSheet.Activate End With End Sub 「読み取り専用を推奨する」をオンにして、Workbook.Openの引数である ignorereadonlyrecommended を設定する…というのも、 やはり上記の点で引っかかります。 何か方法はないものでしょうか。。。

専門家に質問してみよう