- ベストアンサー
ファイルやフォルダの有無、他のユーザーの使用状況を調べたい
ExcelVBAの書き方で質問があります。 ファイル名やフォルダ名を指定して… (1)フォルダにファイルが存在するかどうかを調べる方法 (2)フォルダが存在するかどうかを調べる方法 (3)ファイルが他のユーザーの使用中になっているかを調べる方法 現在は(1)については、Workbooks.Open Filename:=~でファイルが無ければ、On Error GoToで分岐させるといった方法を行っているのですが、もっとダイレクトに有無を調べる方法が知りたいのです。 (2)や(3)については、どうすればよいのやら? 初心者ですので、簡単な表現でお願いします。 よろしくご教授下さい。
- みんなの回答 (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
その他の回答 (1)
- darksky
- ベストアンサー率66% (38/57)
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を良く勉強してみたいと思います。
お礼
うまくいきました! ありがとうございました! 具体的に書いていただき、大変助かりました! またよろしくお願いします!