Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6843 / 13646 ツリー ←次へ | 前へ→

【42731】ファイルが使用可能になるまで待機 siga 06/9/20(水) 11:18 質問[未読]
【42742】Re:ファイルが使用可能になるまで待機 ハチ 06/9/20(水) 13:41 発言[未読]
【42801】ありがとうございます shiga 06/9/22(金) 8:31 お礼[未読]

【42731】ファイルが使用可能になるまで待機
質問  siga  - 06/9/20(水) 11:18 -

引用なし
パスワード
   はじめましてどうしても解決できないので
ご教授よろしくお願いいたします。
他のユーザーが目的のファイル(csv)を開いている間
(読み取り専用の間)処理を待機したいのですが・・・

///////////////////////////////////////////////
Dim s_path As String
Dim s_name As String
Dim s_fpath As String

Application.DisplayAlerts = False
Application.ScreenUpdating = False

s_path = ActiveWorkbook.Path
s_name ="ファイル名"
s_fpath = s_path & "\" & s_name & ".csv"

file_open:
  Workbooks.Open Filename:= s_fpath

  Do Until ActiveWorkbook.ReadOnly = False
    ActiveWorkbook.Close
    GoTo file_open:
  Loop

次の処理へ
//////////////////////////////////////////////
と言うように開いたファイルが読み取り専用の場合は閉じて
また開くという繰り返しのコードを組んでみました。

ただ問題なのは処理を繰り返している間に他のユーザーが目的のファイルを
閉じた際に「ファイルが使用可能になりました」というような表示がされる
ということです。
これを表示しない方法。若しくは目的のファイルを開く前にそのファイルが
使用中かどうか調べる方法はありますか?

よろしくお願いいたします。

【42742】Re:ファイルが使用可能になるまで待機
発言  ハチ  - 06/9/20(水) 13:41 -

引用なし
パスワード
   ▼siga さん:

↓からサンプルコード拝借してみました。
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B291295

ローカルなら、いけましたが試してみてください。

Option Explicit

Sub Test()
  Dim myFile As String
  Dim i As Integer
  
  myFile = ThisWorkbook.Path & "\Test.csv"
  i = 0
  Do Until IsFileOpen(myFile) = False
    Application.Wait (Now + TimeValue("0:00:01"))
    i = i + 1
    If i >= 10 Then Exit Do
  Loop
  If i >= 10 Then MsgBox "タイムアウトしました": Exit Sub
  Workbooks.Open (myFile)
End Sub

Function IsFileOpen(filename As String)
  Dim filenum As Integer, errnum As Integer

  On Error Resume Next
  filenum = FreeFile()
  Open filename For Input Lock Read As #filenum
  Close filenum
  errnum = Err
  On Error GoTo 0
  Select Case errnum
    Case 0
     IsFileOpen = False
    Case 70
      IsFileOpen = True
    Case Else
      Error errnum
  End Select

End Function

【42801】ありがとうございます
お礼  shiga  - 06/9/22(金) 8:31 -

引用なし
パスワード
   ▼ハチ さん:
>▼siga さん:
>
>↓からサンプルコード拝借してみました。
>http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B291295
>
>ローカルなら、いけましたが試してみてください。
>
>Option Explicit
>
>Sub Test()
>  Dim myFile As String
>  Dim i As Integer
>  
>  myFile = ThisWorkbook.Path & "\Test.csv"
>  i = 0
>  Do Until IsFileOpen(myFile) = False
>    Application.Wait (Now + TimeValue("0:00:01"))
>    i = i + 1
>    If i >= 10 Then Exit Do
>  Loop
>  If i >= 10 Then MsgBox "タイムアウトしました": Exit Sub
>  Workbooks.Open (myFile)
>End Sub
>
>Function IsFileOpen(filename As String)
>  Dim filenum As Integer, errnum As Integer
>
>  On Error Resume Next
>  filenum = FreeFile()
>  Open filename For Input Lock Read As #filenum
>  Close filenum
>  errnum = Err
>  On Error GoTo 0
>  Select Case errnum
>    Case 0
>     IsFileOpen = False
>    Case 70
>      IsFileOpen = True
>    Case Else
>      Error errnum
>  End Select
>
>End Function


出来ました!ありがとうございます!!

6843 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free