【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?

お世話になっております。

Excel VBA についてご質問します。
今、VBAでCSVファイルを作成してデータ管理を行うソフトを作成しております。
このソフトは、共有をかけて複数の人で使用するため同じCSVファイルに同時にアクセスする可能性があります。そのため、CSVファイルに混同したデータが書き込まれてしまう恐れがあります。
そこで、CSVファイルがオープン中または、アクセス中が認識できる命令等はないでしょうか?

よろしくお願いします。

A 回答 (2件)

こんにちは。



CSV ファイルですか....難しいですよ。

Excel で CSV を開く場合、ファイルはロックされるため、下記のような
ロジックで使用中かどうかを調べることは可能です。

' // ファイルが使用中か調べる
Public Function FileInUse(ByVal sFilename As String) As Boolean

  Dim n As Integer
  n = FreeFile()
  On Error Resume Next
  Open sFilename For Binary Lock Read Write As #n
  FileInUse = CBool(Err.Number > 0)
  Close #n
  On Error GoTo 0

End Function

ただし、これは CSV を編集するアプリが、ファイルを開くときに、
ファイルをロックする、、これが条件です。ロックされないファイル
について、使用中かどうかを判定する術はありません。

CSV は Excel で編集すると限定できる場合は、このロジックで十分です。

しかし、CSV の実態は単純なテキストですから、メモ帳などでも編集
できますよね?
メモ帳(他多くのエディタ)では、ファイルがロックがされませんから、
このケースでは検知できません。

心配ならデータベース(例えば mdb とか)を使った方がよろしいのでは?
    • good
    • 3
この回答へのお礼

お世話になっております。
お返事が遅れて申し訳ありません。

ご回答ありがとうございました。
参考にさせていただきます。

今後ともよろしくお願いします。

お礼日時:2009/02/25 09:53

下記を参考にできませんか。




Sub getuserstatus()

Users = Workbooks("Book2.csv").UserStatus
'Book2を開いているユーザー数
un = UBound(Users, 1)  
Debug.Print un

For Row = 1 To un
'ユーザー名と日時
Debug.Print Users(Row, 1), Users(Row, 2),
'状態
Select Case Users(Row, 3)
Case 1
Debug.Print "Exclusive"
Case 2
Debug.Print "Shared"  '共有
End Select
Next

End Sub
    • good
    • 1
この回答へのお礼

お世話になっております。
お返事が遅れて申し訳ありませんでした。

ご回答ありがとうございました。
ユーザーを確認する方法がありますね。
参考にさせていただきます。

今後ともよろしくお願いします。

お礼日時:2009/02/25 09:49

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

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


おすすめ情報

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