プロが教えるわが家の防犯対策術!

FileSearchを使って複数のエクセルファイルを順に開きシート内容の更新を行っています。更新すべきファイルは、LAN上のサーバ(LANハードディスク)内のフォルダにおいてありますが、複数の人がファイルを開いて作業を行います。その時、FileSearchで更新作業をしようとすると2重に開く現象が発生します。
ファイルを開く方法は、openメゾッドをworbooksコレクションに対して行っています。
Workbooks.Open Filename:=.FoundFiles(iCount), UpdateLinks:=0で開き、Workbooks(FlieName).Close SaveChanges:=Trueで閉じます。
しかしこのままですと、読み取り専用でファイルを開いてしまい、保存時にコピーを保存するでマクロが止まります。そこで、openメゾッドに、Notify:=Falseを着けると、「読み取り専用で開きますか?」で停止します。次に、On Error GoTo でトラップしようとすると、、「読み取り専用で開きますか?」のダイアログで、いいえを選択するとトラップが出来るのですが、ハイだと当然トラップできません。それよりも、ダイアログが表示されるのには変わりありません。
Displayalerts=Falseとすると、ダイアログは表示されなくなりますが、エラーがトラップ出来なくなります。ファイルの2重で開くのトラップってどうすれば出来るのでしょうか?似たようなものにOpenステートメントもあるようですが、うまく出来ませんでした。どなたか?詳しい方教えて頂けませんでしょうか?宜しくお願い致します。
目的としては、2重に開く現象となったファイル名をThisworkbookのシートに一覧保存してあとで対象のものだけ処理を行うようにしたいです。また、2重に開いたときに表示される使用者名もゲットしたいです。
宜しくお願い致します。

A 回答 (2件)

補足です。

#1 の参考URLを参考に関数を書きましたが、

Open strFULLPATH For Binary Access Write As #n

ではなくて、

Open strFULLPATH For Binary Lock Write As #n

とした方が今回の目的にはよりマッチしていると思います。

この回答への補足

いつも、いつも、いつも丁寧なご指導有難う御座います。毎回毎回、新しいことを教えて頂き、恐縮いたします。マイクロソフトも色々と情報を提供し手いるのですね?与えられている情報が全く活用できていないことを、またもや、痛感いたしました。
ほんのちょっとのアレンジが大切である!もっともだと思いました。
本当に、本当に有難う御座います。
今後とも宜しくお願い致します。
お礼の点数を割り振ることしか出来ないことに、申し訳なく感じます。

補足日時:2005/12/08 21:55
    • good
    • 0

こんにちは。

KenKen_SP です。

> ファイルの2重で開くのトラップってどうすれば出来るのでしょうか?

【参考】MS サポートオンライン より
[XL]他ユーザーが使用中のファイルを開く時任意のメッセージを表示する方法
http://support.microsoft.com/default.aspx?scid=k …


これを次のような関数にしてチェックします。

'ファイルが既に開かれているか確認する関数
Function FILE_OPENED(ByRef strFULLPATH As String) As Boolean
  
  Dim n As Long
  n = FreeFile
  On Error Resume Next
  Open strFULLPATH For Binary Access Write As #n
  Close #n
  If Err.Number > 0 Then
    FILE_OPENED = True
  End If
  On Error GoTo 0

End Function

【使い方の例】
IF FILE_OPENED(.FoundFiles(iCount)) Then
 Msgbox "ファイルは使用中です。"
End IF

とりあえず。
    • good
    • 1

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

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