• ベストアンサー

ファイルやフォルダの有無、他のユーザーの使用状況を調べたい

 ExcelVBAの書き方で質問があります。 ファイル名やフォルダ名を指定して… (1)フォルダにファイルが存在するかどうかを調べる方法 (2)フォルダが存在するかどうかを調べる方法 (3)ファイルが他のユーザーの使用中になっているかを調べる方法  現在は(1)については、Workbooks.Open Filename:=~でファイルが無ければ、On Error GoToで分岐させるといった方法を行っているのですが、もっとダイレクトに有無を調べる方法が知りたいのです。  (2)や(3)については、どうすればよいのやら?  初心者ですので、簡単な表現でお願いします。  よろしくご教授下さい。

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

  • ベストアンサー
  • 2ch
  • ベストアンサー率51% (64/125)
回答No.2

Sub Test()   'ディレクトリ存在チェック   MsgBox IsDir("C:\")   '排他状態   MsgBox IsNoOpen("C:\test.xls") End Sub 'ディレクトリ存在チェック 'TRUE=存在している Public Function IsDir(ByVal inDirName As String) As Boolean   Dim fsoObj As Object   Dim fsoDir As Object      On Error Resume Next   Set fsoObj = CreateObject("Scripting.FileSystemObject")   Set fsoDir = fsoObj.GetFolder(inDirName)   IsDir = Not (fsoDir Is Nothing)      Set fsoDir = Nothing   Set fsoObj = Nothing End Function '誰かがファイルを開いていないかをチェックする 'TRUE=編集可能状態で開くことができる Public Function IsNoOpen(ByVal inXlsFileName As String) As Boolean   'ファイルが存在していないのは問題外でアウト   If Dir(inXlsFileName) = "" Then     Exit Function   End If      On Error Resume Next   '書き込み専用でオープンでエラーが発生しなければ、誰も開いていないとみなす   Open inXlsFileName For Binary Lock Read Write As #1   Close #1   IsNoOpen = (Err.Number = 0&) End Function

takaandhiro
質問者

お礼

うまくいきました! ありがとうございました! 具体的に書いていただき、大変助かりました! またよろしくお願いします!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • darksky
  • ベストアンサー率66% (38/57)
回答No.1

ExcelVBAだけでファイルシステム関連の情報が入手できるかはわかりませんが、代替案としては「Microsoft Windows スクリプト テクノロジ」に含まれるWindows Script Hostの各種オブジェクトを利用する方法があります。 Microsoft Windows スクリプト テクノロジとは、JScriptやVBScriptの言語やScriptの実行環境、スクリプトから利用できるコンポーネントなどのことです。 Windows Script Hostには、各種機能を提供するCOMコンポーネントが多数含まれており、VBAからも呼び出すことが可能です。 作成したExcelVBAを配布する場合は、利用したコンポーネントがインストールされている必要があると思いますが、IEの5.x以上があればインストールされていると思うのですが・・・ (曖昧で申し訳ありません) FSO(FileSystemObject)にはドライブ、フォルダ、ファイル関連の情報を取得することができるオブジェクトが多数含まれているので、利用すると便利だと思います。 参考URLも書きましたが、「FileSystemObject」で検索するといい情報が見つかると思います。 ExcelVBAの場合は、「Microsoft Scripting Runtime」を参照設定する必要があるかもしれません。 VBAはあまり使ったことがないので、解決になるかはわかりませんが、VBからはFileSystemObjectをよく使っている話を聞きます。

参考URL:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/jsobjFileSystem.asp
takaandhiro
質問者

お礼

ありがとうございました。 URLを良く勉強してみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 他のフォルダにあるファイルからユーザーフォーム表示

    現在(1)の方法でやってますが、これを (2)の方法でユーザーフォームを表示したいです。この方法するためのコードを教えてほしいです。超初心者なので具体的に教えてほしいです。 (1)デスクトップにフォルダ「A処理」があり、開くとB.xlsm とC.xlsm 二つのファイルがあり、C.xlsm を選ぶと同時にユーザーフォームが開きます。 (2)デスクトップにフォルダ「A処理」があり、開くとB.xlsm とフォルダ「A 計算」があります。フォルダ「A計算」の中に、C.xlsm があります。 B.xlsm を選ぶと、ユーザーフォーム(表紙)が表示され、その中のコマンドボタンを押すと、フォルダ「A計算」の中のC.xlsm が表示されますが、ユーザーフォームは、ひらきません。 そのコマンドボタンには、次のコードが入っています。 Private Sub CommandButton96_Click() A表紙.Hide Workbooks.Open Filename:=ThisWorkbook.Path & "\A計算\C.xlsm" load UserForm1 UserForm1.Show Sheets(1).Select End Sub

  • アクセスのMDBファイルを他のユーザーに強制的に読

    アクセスのMDBファイルを他のユーザーに強制的に読み取り専用で開かせる方法は? 私が作ったファイルを他の人にメールで送って その人はローカルで保存し、共有ではなく一人で使う場合、 読み取り専用にしたいです。 エクセルなら Private Sub Workbook_Open() Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & ActiveWorkbook.Name, ReadOnly:=True End Sub でできましたが アクセスの場合は どうすればいいでしょうか? ヴァージョンは2003です。 よろしくお願いします。

  • Aファイルでマクロを組み他のファイルを動かしたい

    Sub マクロ1() Workbooks.Open Filename:="C:\Users\inoue\Documents\BB.xls" ここでファイル名を選ぶのはどんな命令文 したら良いかご指導願います      (ファイル名がその度に変更するため)     Range("D7:H16").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With Selection.Interior.ColorIndex = 6 Range("D18").Select Windows("A.xls").Activate End Sub 上記の命令文で ファイル呼び出しの時 他のフォルダのファイル名 その都度選びたいのですご指導願います

  • Excel VBA の ChangeFileAccess

    Excel(2000 SP-3) VBAの ChangeFileAccessがうまく行きません。 VBAからあるExcelファイルをWorkbooks.Open で開く処理の制御で悩んでいます。 2人で同時にマクロでhoge.xls をOpenすると、どちらも「他のユーザが使用中です」的なメッセージが出ませんでした。 (エクスプローラからクリックしたりして、hoge.xlsを直接開くと、他のユーザが使用中かどうかがわかります) それでは困るので、ChangeFileAccess のNotify:=true をセットしてみたら、2人目は他のユーザが使用中である旨のメッセージが出るようになりました。 しかし、ChangeFileAccess のNotifyはちゃんと設定されているようなのですが、 'ChangeFileAccess'メソッドは失敗しました:'_Workbook'オブジェクト とエラーが出ています。 ChangeFileAccessはどう使うのが正しいのでしょうか? ソースは Workbooks.Open Filename:=ThisWorkbook.Path & "\hoge.xls", updatelinks:=1, Notify:=True ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, Notify:=True って感じなのですが。 Workbooks.Openはちゃんとできています。Workbooks.OpenがコケたらOn Error Goto で拾ってMsgBoxでメッセージを出す、という処理をしているのですが、Workbooks.OpenはOKなのにChangeFileAccessでコケて、On Error Goto に引っかかってしまっています。

  • コマンドプロンプトによるフォルダ内のファイル存在有無

    バッチ処理で、特定のフォルダ内(配下にフォルダとファイルが混在している)でファイルだけの存在有無を調べて、ファイルが存在している場合とファイルが存在していない場合で処理を別々に行わせようとしたいのですが、ファイルの存在有無はどのようにコマンドで調べれば良いでしょうか? DIR C:\test\*.* でファイルを調べて、ERRORLEVELでif判定させようと思っているのですが、 DIRコマンドでこれを行うと、フォルダまで表示されます。 どのようにしたら良いのでしょうか?教えてください。

  • 【Windows7】ユーザーフォルダが見えなくなりました

    ユーザーのドキュメントフォルダ場所を移動させようと、Dドライブへ移す作業をしていたら、「C\User\[ユーザー名]」フォルダが見えなくなってしまいました。 フォルダを表示する設定か何かあれば、教えて頂けませんでしょうか? インストールしたばかりのときは見えていました。 ユーザーフォルダより下層のファイルを検索すると、「C\User\[ユーザー名]\.....」とパスが出るので、存在はしていると思います。 フォルダオプションですべてのフォルダ、ファイルを表示設定にしていますが、見えないままです。 同じように、いろいろ動かしているうちに、マイミュージックフォルダも見えなくなってしまい、10GBもある音楽ファイルが行方不明です。(検索すれば出ますが) とりあえずshellコマンドでマイミュージックフォルダを復活させる方法を調べられましたが、ファイルが入っているフォルダは見えないままです。 OSはWindows7 Home Premium 64bitです。 2000から乗り換えたので、だいぶ浦島太郎状態で混乱しています;; 宜しくお願い致します。

  • VBAでフォルダ指定

    ExcelVBAでは、workbooks.open とすればファイルを開く事ができるのですが フォルダも開く事ができるのでしょうか?

  • フォルダ内の全てのファイル開く時間短縮の方法

    Excelのマクロを使ってフォルダ内の全てのファイルを開く以下のコードを利用しているのですが(教えてgoo!で教えて頂いたコードです)、ファイル数が10個くらいあるため全部開くのに1分くらいかかってしまいます。 もっと時間を短縮することはできませんでしょうか? Sub OpenAllBook()   Dim FileName As String   Dim OpenedBook As Workbook   Dim IsBookOpen As Boolean   ChDir ("フォルダ名")   FileName = Dir("*.xls")   Do While FileName <> ""    If FileName <> ThisWorkbook.Name Then     IsBookOpen = False     For Each OpenedBook In Workbooks      If OpenedBook.Name = FileName Then       IsBookOpen = True       Exit For      End If     Next     If IsBookOpen = False Then      Workbooks.Open (FileName)     End If    End If    FileName = Dir()   Loop End Sub

  • 以前使用していたPC名がユーザフォルダに残る状況?

     今晩は、質問させていただきます。どうぞよろしくお願いいたします。  環境:Lenovo製ノートPC 型式:G580     Win7 Professional Corei5 64Bit でございます。  Administratorでログインしておりますが、何故か「C:\Users」フォルダ内に 「Administrator」 と 「Administrator.ユーザー1」 (「ユーザー1」は以前にコンピュータ名に使用していた文字列で、Administratorとの間にドットが入っております) というフォルダ2つが存在し、ドキュメントフォルダ内に作成したファイルが後者のフォルダに入ってしまい、困っております。 (例えばスタートメニューの「ドキュメント」をクリックすると「ライブラリ¥ドキュメント」フォルダが開きますが、そこに何らかのファイルを作成してそれのプロパティを見ますと、 「場所: C:\Users\Administrator.ユーザー1\Documents」 となっております。)  数日前にもアドバイスいただきまして、コマンドプロンプトから試しに 「net user Administrator.ユーザー1 /Active:no」としてみましたが消せませんでした。。。  このようなフォルダができそうな原因だけでも何か分かれば、解決の糸口が見つかるのでは、と思うのでございますが、 もし何か思いつかれる事がございましたら、是非ともお教えいただきたくお願い致します。  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • C# ネット上のファイルの有無確認

    string fileName = @"C:\test.txt"; if (System.IO.File.Exists(fileName)) { MessageBox.Show("'" + fileName + "'は存在します。"); } else { MessageBox.Show("'" + fileName + "'は存在しません。"); } このようなC#ソースを見つけたので、これをネット上のファイルの有無確認に転用したいです。 string fileName = @"http://cmm001.goo.ne.jp/img/logo/goo.gif"; このように変更しても確認は出来ないようです。 指定方法を教えて下さい。