- ベストアンサー
VBAでCSVファイルが使用中かどうかの確認
お世話になっております。 Excel VBA についてご質問します。 今、VBAでCSVファイルを作成してデータ管理を行うソフトを作成しております。 このソフトは、共有をかけて複数の人で使用するため同じCSVファイルに同時にアクセスする可能性があります。そのため、CSVファイルに混同したデータが書き込まれてしまう恐れがあります。 そこで、CSVファイルがオープン中または、アクセス中が認識できる命令等はないでしょうか? よろしくお願いします。
- みんなの回答 (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 とか)を使った方がよろしいのでは?
その他の回答 (1)
- okormazd
- ベストアンサー率50% (1224/2412)
下記を参考にできませんか。 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
お礼
お世話になっております。 お返事が遅れて申し訳ありませんでした。 ご回答ありがとうございました。 ユーザーを確認する方法がありますね。 参考にさせていただきます。 今後ともよろしくお願いします。
お礼
お世話になっております。 お返事が遅れて申し訳ありません。 ご回答ありがとうございました。 参考にさせていただきます。 今後ともよろしくお願いします。