• ベストアンサー

VBAでCSVファイルが使用中かどうかの確認

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

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.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 とか)を使った方がよろしいのでは?

cappcino
質問者

お礼

お世話になっております。 お返事が遅れて申し訳ありません。 ご回答ありがとうございました。 参考にさせていただきます。 今後ともよろしくお願いします。

その他の回答 (1)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

下記を参考にできませんか。 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

cappcino
質問者

お礼

お世話になっております。 お返事が遅れて申し訳ありませんでした。 ご回答ありがとうございました。 ユーザーを確認する方法がありますね。 参考にさせていただきます。 今後ともよろしくお願いします。

関連するQ&A

  • excel vbaで複数のcsvファイルの読み込み

    100シート分のcsvファイルのデーターを一つずつ読み込んでexcelにコピーして使用してますが莫大な時間がかかって困ってます。 vbaを使用して作業を簡素化出来る事は出来ないでしょうか? ------------------------------------------ ※ csvの概要 excelで1枚のcsvファイルを開くとA列の11行目から65536行まで数値データがあります。 ※ vbaできたらよいなと思う仕様 そこで、複数のcsvファイルを選択して読み込むとCSV_データと言うSeetのA列の10行目から1枚目のcsvファイル、B列の10行目から2枚目のcsvファイルと言う風に選択した分のcsvを列に続けて数値データを貼り付けしてくれるvbaをご教授していただけると大変助かります。 不躾で申し訳ございませんが宜しくお願い致します。 excel2003 ------------------------------------------

  • Excel VBAにてCSVファイルを読みたい

    ExcelにてCSVファイルを読んで処理をしたい。 ただし、CSVファイルをExcelでopenすると遅いので、 VBAにてファイルとして読み込みで処理をしたいのですが、 皆さんは、どのように行っていますか? ※CSVファイルは、テキスト区切り→"(ダブルコーテーション)です  テキスト区切り無しであれば、1行読んで、カンマをsplitすれば良いと思いますが。。。。

  • CSVファイルを手で開いた後VBAを動かしたい

    すみませんが教えてください Excel VBAで、SaveしてあるCSVファイルを開くのは良く見ます でも、この方法ではなくて、あるシステムから切り出してきたCSVファイル を開いた状態からVBAを動かすにはどうしたらよいでしょうか? 理由は、どうも日付データがSaveしてしまうと消えてしまうようで、 (システムから切り出したCSV・・・2013-01-06 00:00:00) (SaveしたCSVを読み出すと・・・0000-00-00 00:00:00) このためSaveしたCSVファイルを開いてVBAを動かすことができません Excel形式にしてSaveしても同様です 何かもっと良い方法がありますか?

  • 【Access2000VBA】CSVファイルインポートの不具合

    Access2000でCSVファイルインポートをVBAで行っています。 ところが、CSVファイル内に全角カンマ(,)がある場合、 区切り文字として認識されてしまい困っています。 区切り文字としてではなく文字として取得したいのですが可能でしょうか。 お手数ですが方法がわかる方、ご回答よろしくお願いいたします。

  • FileDialogでのファイル選択

    はじめまして。VBA初心者です。 FileDialogを使って複数のcsvファイルを選択し、 Open ~ For Input As #1 でcsvの中身を取り出し、必要なデータだけエクセル上にコピーするという方法を使っていたのですが、csvファイルが膨大になるとファイルをすべて同時に選ぶと固まってしまいます。 200個くらいのcsvファイルを同時に選んで「開く」ボタンで読み込んでいたときは大丈夫だったのですが、2000個とかになると固まってしまいます。(あたりまえといえば当たり前ですが・・) なんとかして同時に大量のファイルをFileDialogで選択しても固まらない方法はないでしょうか? もし何か良い方法があったら教えていただけると幸いです。 よろしくお願いいたします。

  • エクセルVBA CSVファイルで保存方法

    エクセルのVBA初心者です。 VBAでコードを組んでデータ作成できるようにしました。 最後にそのデータをどのパソコンのディスクトップでもCSVファイルで 保存されるようにコードを組みたいと考えております。 教えて頂ければ幸いです。 宜しくお願い致します。

  • ACCESS VBAで、CSVにデータを吐き出したいのです

    ACCESS VBAで、CSVにデータを吐き出したいのですが、WORKのテーブルを作るのが面倒なので、変数にセットしたカンマ区切りのデータを直接CSVに吐き出したいと思っております。 TXT = .Height & "," & .Weight を Open "A:DATA.CSV" For Output As #Name へ一件ずつループで回して吐き出したいのですが、「型が一致しません」というエラーがでます。ご存知の方がいらっしゃいましたら、どいうロジックを書けば良いか教えて下さい。

  • VBA:2つのCSVファイルを開きたいです。

    エクセル2010のVBAにてCSVファイルを開き結合させるプログラムを組もうとしているのですが、2つ目のCSVファイルを開こうとすると、何故かエラーが出てしまいます。 -------------------------------------------------------------------------------- 1つ目 Sub mobile_FileSearch(Path As String) 'test.csvのデータを検索して開く Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Call mobile_FileSearch(Folder.Path) Next Folder For Each File In FSO.GetFolder(Path).Files If File.Name = "test.csv" Then Workbooks.Open ("test.csv") End If Next File End Sub ---------------------------------------------------------------------------- 2つ目 Sub local_FileSearch(Path As String) 'bbb.csvのデータを検索して開く Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Call local_FileSearch(Folder.Path) Next Folder For Each File In FSO.GetFolder(Path).Files If File.Name = "bbb.csv" Then Workbooks.Open ("bbb.csv")'←ここでエラー End If Next File End Sub ------------------------------------------------------------------------ まったく同じプログラムで、csvファイル名だけ変えただけで実行時エラー1004が出てしまいます。 一体全体何が問題なのでしょうか?

  • VBAでCSVファイルのインポートについて

    ACCESS2003でCSVファイルのインポートを行うVBAをご教授下さい。 ただし、CSVファイルは各項目がダブルコーテーションではさまれており、カンマはありません。 1行目にヘッダーがあります。 DoCmd.TransferText acImportDelim, , FileName, ImportPath, True ↑ これだと、うまくインポートされませんでした。 大変困っております。 どうぞよろしくお願い致します。

  • エクセルVBAでCSVファイルから取り込みたいのですが・・・

    CSVファイルのデータを取り込むコードを教えていただけないでしょうか。 「共有フォルダ」の中に「作業用.xls」と「090820.csv」があります。csvファイルは日によって名前が変わりますが、必ず一つしか入れないことにしています。 CSVファイルの1行目は見出しです。2行目以降がデータになっています。 A2からI列最終行を「作業用.xls」のsheet1のA6にコピー(取り込み)したいのですが、よろしくお願いします。

専門家に質問してみよう