Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理

大変お世話になっています。 サーバ上にあるファイルを更新するVBAを作りました。 該当ファイルはあらかじめ閉じられていて、オープンして処理終了後保存して閉じるという仕様になっているのですが、そのファイルは複数人が使用するもののため、「閉じている」ことを前提としたVBAにもかかわらず、ファイルが開いている可能性があります。 そこで、一番最初に「ファイルが開かれていたら何もせずに終了する」という判断をしたいのですが、いい方法はあるでしょうか。 過去の質問を検索したところ、 If .ReadOnly Then ’処理を行わない Else ’処理を行う End If という書き方があるようですが、VBAを使わない場合でも「他の人が使用中です。読み取り専用で開きますか?」というメッセージが自動で出てしまうため、これを出さずに強制終了できると嬉しいです。 達人の皆様、どうかお知恵をかして下さいませ。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >過去の質問を検索したところ、 >If .ReadOnly Then それは正しい回答だったのでしょうか? ダミーのバイナリ編集をすればよいのではありませんか?既に開いていれば、エラーが返りますので、それでチェックできます。 サンプル: Sub BookEnableEdit() Dim MyPath As String Dim myFno As Integer Const Fname As String = "test.xls" 'ファイル名 MyPath = \\サーバー名\共有フォルダ & "\" If Dir(MyPath & Fname) <> "" Then   myFno = FreeFile   On Error Resume Next   Open MyPath & Fname For Binary Lock Read Write As #myFno   Close #myFno End If  If Err.Number > 0 Then   MsgBox "ブックは開いています", vbInformation   Exit Sub  End If  On Error GoTo 0 End Sub

bari_saku
質問者

補足

いつもお世話になっております。 例によって、参考書と首っ引きでコードを読ませていただきました。 そこでテストしてみようと思ったところ、MyPath~の所でなぜかコンパイルエラーになってしまうのですが… ファイルをオープンする時の、サーバ名から指定しているコードの、ファイル名より前の部分をそのままコピペしたのですが、それがよくないのでしょうか。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

たびたびすみません。 >If Dir(MyPath & Fname) → If Dir(MyPath) >としても大丈夫ですよね? ご指摘のとおりです。

bari_saku
質問者

お礼

こんにちは。 お陰様で、無事今回の一連の作業は終了しました。 教えて頂いたコードは、今の私には、一人では絶対に書けなかったと思います。 本当に助かりました。ありがとうございました。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

>サーバ名から指定しているコードの、ファイル名より前の部分をそのままコピペしたのですが MyPath = "\\サーバー名\共有フォルダ" & "\" すみません。"" 「クォーテーション」が入っていませんでした。 ただ、コピーしたものをそのまま、 'Const Fname As String = "" 'ファイル名 ↑これは使わないで、 以下に、貼り付けてよいです。 MyPath = "\\サーバー名\共有フォルダ\test.xls"

bari_saku
質問者

お礼

ありがとうございます!無事機能を追加することができました! それですみません、一点だけ確認させて頂きたいのですが、「'Const Fname ~」の部分を削除したということは、例えばここの行などは「 & Fname」を削除して、 If Dir(MyPath & Fname) → If Dir(MyPath) としても大丈夫ですよね?

すると、全ての回答が全文表示されます。
  • ta123
  • ベストアンサー率51% (95/186)
回答No.1

そのメッセージを抑止できるか確認していないのですが Application.DisplayAlert = False で何とかならないですか。 達人でなくってすみません。

bari_saku
質問者

お礼

いえいえ、ご回答恐れ入ります。 こちらのIF文の内容はまだ試していないのですが、何となく今回の仕様にそぐわない気がしてきまして、採用しないことにしました。 すみません。そしてありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A