プロが教える店舗&オフィスのセキュリティ対策術

大変お世話になっています。

サーバ上にあるファイルを更新するVBAを作りました。
該当ファイルはあらかじめ閉じられていて、オープンして処理終了後保存して閉じるという仕様になっているのですが、そのファイルは複数人が使用するもののため、「閉じている」ことを前提としたVBAにもかかわらず、ファイルが開いている可能性があります。

そこで、一番最初に「ファイルが開かれていたら何もせずに終了する」という判断をしたいのですが、いい方法はあるでしょうか。

過去の質問を検索したところ、

If .ReadOnly Then
’処理を行わない
Else
’処理を行う
End If

という書き方があるようですが、VBAを使わない場合でも「他の人が使用中です。読み取り専用で開きますか?」というメッセージが自動で出てしまうため、これを出さずに強制終了できると嬉しいです。

達人の皆様、どうかお知恵をかして下さいませ。

gooドクター

A 回答 (4件)

こんにちは。



>過去の質問を検索したところ、
>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

この回答への補足

いつもお世話になっております。
例によって、参考書と首っ引きでコードを読ませていただきました。

そこでテストしてみようと思ったところ、MyPath~の所でなぜかコンパイルエラーになってしまうのですが…

ファイルをオープンする時の、サーバ名から指定しているコードの、ファイル名より前の部分をそのままコピペしたのですが、それがよくないのでしょうか。

補足日時:2005/06/22 16:48
    • good
    • 0

たびたびすみません。


>If Dir(MyPath & Fname) → If Dir(MyPath)
>としても大丈夫ですよね?

ご指摘のとおりです。
    • good
    • 0
この回答へのお礼

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

本当に助かりました。ありがとうございました。

お礼日時:2005/06/23 14:38

>サーバ名から指定しているコードの、ファイル名より前の部分をそのままコピペしたのですが



MyPath = "\\サーバー名\共有フォルダ" & "\"
すみません。"" 「クォーテーション」が入っていませんでした。

ただ、コピーしたものをそのまま、
'Const Fname As String = "" 'ファイル名
↑これは使わないで、

以下に、貼り付けてよいです。
MyPath = "\\サーバー名\共有フォルダ\test.xls"
    • good
    • 2
この回答へのお礼

ありがとうございます!無事機能を追加することができました!

それですみません、一点だけ確認させて頂きたいのですが、「'Const Fname ~」の部分を削除したということは、例えばここの行などは「 & Fname」を削除して、

If Dir(MyPath & Fname) → If Dir(MyPath)

としても大丈夫ですよね?

お礼日時:2005/06/23 12:00

そのメッセージを抑止できるか確認していないのですが



Application.DisplayAlert = False

で何とかならないですか。
達人でなくってすみません。
    • good
    • 0
この回答へのお礼

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

すみません。そしてありがとうございました。

お礼日時:2005/06/22 16:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング