• ベストアンサー

Filesearchオブジェクトを使用して隠しファイルを検索したい

こんばんは。 ExcelVBAを使用してファイル検索プログラムを作成したのですが、思うように動作させることができません。 作成したのは、セルに入力されているファイル名を取得して指定したドライブにファイルがあればそのファイルのパスを表示するプログラムです。 タイトルにあるように隠しファイルを検索することができません。 動作させたい環境は、 Windows98,Excel97 です。 (Windows2000,WindowsXPでExcel2000だと隠しファイルも検索することができました。) 自分で思いついて試してみたのは、 "Explorerの"フォルダオプション"-"表示"内の隠しファイルも表示するのチェックをOnにして検索プログラムを実行する"でしたがやはりだめでした。 どなたか解決方法をご存知の方がいらしたらご教授お願いできますでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
回答No.4

>また、FileSystemObjectを使用することに関してですが私とは別の人がFileSystemObjectを使用してVBでツールを作ったのですがこちらのが検索時間が短かったため私のを使うということになりました。 でももしかしたら、検索はFSOを利用しているかもしれません。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnofftalk/htm/office09072000.asp ※最初の説明とCustomFindFile関数の、変数名の扱い(Dim fsoFileSearch As Office.FileSearch)から推測 VBアプリはアルゴリズムがしっかりしていても、高速処理には不向きという欠点があるし、OfficeはC(?)なので作られたライブラリを利用しているので、速度差は出ると思います。 で、実験をお願いしたいです。 同じOS,Officeで差がでるなら、直接FSOの動きを見てみるのはいかがでしょう? あらかじめ、隠しフォルダ/隠しファイルを作成しておいてVBScriptで以下を実行してみてください。 --------------------------------------------------------------------------------------------- Set fsoObj = CreateObject("Scripting.FileSystemObject") '隠しフォルダ取得テスト Call MsgBox(fsoObj.FolderExists("C:\隠しフォルダ\")) '隠しファイル取得テスト Call MsgBox(fsoObj.FileExists("C:\隠しフォルダ\隠しファイル.txt")) Set fsoObj = Nothing --------------------------------------------------------------------------------------------- 2回Trueが走りますか? TrueならOfficeの問題 FalseならOSの問題 だと、勝手に推測 ※あくまでOfficeがFSO技術を利用していると仮定しての実験ですが・・・ ※はずしていたらすいません。

miyaxyz2002
質問者

お礼

こんばんは。 回答が遅くなってすみません。 結論から言うと、他の人がVBで作ったツールを使って作業をすることになりました。 '隠しフォルダ取得テスト'の件ですが、Windows98SE,Excel97の環境で使用してみたところ'True'が2回表示されました。 FileSearchがFSOを使用しているのかは正直はっきりとはわからないのですが、今回の件はOfficeの仕様の問題ではないかと私も思います。 1050\さんが参考として載せてくれたMSのページに"Office.FileSearch"と書いてあるので"FileSearch"は"Office"特有のオブジェクトなのだと理解しました。 そういった理由から今回はVBのツールで作業を行うことにしました。 今回の件は大変勉強になりました。 丁寧にアドバイスして大変感謝です。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 >Windows98SE,Excel97 SR-2です。 この件は、あまり確かではありませんが、FileSeach オブジェクトは、Outlook などのツールと関係があったと思います。だから、 >1.Officeにパッチをあてる。 >2.Windowsアップデートをあてる。 +IE のアップデート で、その環境が変わるのかもしれません。FileSearch オブジェクト直接ではありませんが、同じ機能を使っている、Officeの検索機能が使えなくなった話をみています。それも、初期には使えているが、後で使えなくなったということです。 私は、FileSearch オブジェクトは、検索の条件を増やすと極端にメモリの使用と検索時間が遅くなるので、例えば、Excelファイルのみという条件以外には使いません。 そこで、例えば、以下のようなコードなら、ノーマルファイルと隠し属性まで探しますね。 条件によって直してください。 Sub FileSearch2() Dim MyFile As String Dim AtFlg As String Const Dname = "C:\" Const Fname = "*.txt" MyFile = Dir(Dname & Fname, vbHidden) Do While MyFile <> ""    If GetAttr(Dname & MyFile) = vbHidden Then AtFlg = ", Hidden"      MsgBox MyFile & AtFlg    AtFlg = ""   MyFile = Dir Loop End Sub 隠し属性がついているときには、"ファイル名, Hidden" と出せます。

miyaxyz2002
質問者

お礼

こんばんは。 回答が遅くなってすみません。 結論から言うと、他の人がVBで作ったツールを使って作業をすることになりました。 >FileSearch オブジェクト直接ではありませんが、同じ機能を使っている、Officeの検索機能が使えなくなった話をみています。 の件ですが、 1050\さんが参考として載せてくれたMSのページに"Office.FileSearch"と書いてあるので"FileSearch"は"Office"特有のオブジェクトなのだと思います。 また、"Dir"の使用に関してですが別の人がVBで既にツールを作っていたこともありツールの作成時間なども考えてそちらを使うことにしました。 今回の件は大変勉強になりました。 丁寧にアドバイスして大変感謝です。

回答No.3

OSによって違う。 環境によって違う。 から想像すると、、、 1.Officeにパッチをあてる。 2.Windowsアップデートをあてる。 #2さんも環境を持っているようだし、質問者のOSのバージョンとOfficeのバージョンをそれぞれ書いてみては? ※バージョン=サービスパック状況を含む

miyaxyz2002
質問者

補足

こんばんは。アドバイスありがとうございます。 >1.Officeにパッチをあてる。 >2.Windowsアップデートをあてる。 もっともだと思いますが、"社内の数百台のPC内部監査で使用している(もちろんPCは98系ばかりではありませんし、どちらかというと少数派です)"・"管理者がアップデートをすることによって今まで動いていた環境が変わることを嫌っている"こともありなかなか即決できない状況です。 また、FileSystemObjectを使用することに関してですが私とは別の人がFileSystemObjectを使用してVBでツールを作ったのですがこちらのが検索時間が短かったため私のを使うということになりました。 いまさらながらの長々とした状況説明になってしまって申し訳ないです。 ちなみにOSとOfficeのバージョンですが、Windows98SE,Excel97 SR-2です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 Excel 97 で、FileSearch を使用してチェックしてみましたが、問題ありません。隠し属性のファイルを検索できます。 >"Explorerの"フォルダオプション"-"表示"内の隠しファイルも表示するのチェックをOnにして検索プログラムを実行する"でしたがやはりだめでした。 一度、[スタート]-[設定]-[フォルダオプション]-[表示]で、設定しなおしてみてください。それで、ダメなら、コードを公開してください。

miyaxyz2002
質問者

補足

こんにちは。アドバイスを参考にフォルダオプションを設定みたのですが、やはりだめでした。 該当する箇所のコードを公開しますのでもし何かアドバイスなどがあったらお願いいたします。 With Application.FileSearch .NewSearch .LookIn = DName 'DName:ドライブ名 .SearchSubFolders = True .MatchTextExactly = True .Filename = FName 'FName:ファイル名 .FileType = msoFileTypeAllFiles If .Execute() > 0 Then For i = 1 To .FoundFiles.Count        Msgbox .FoundFiles(i) Next i end if End With

回答No.1

.SearchSubFolders = True .FileType = msoFileTypeAllFiles を追加してダメなら、FileSearchの仕様なのでしょう。 FileSystemObjectを使用するなりの、別方法を考える必要があるかもしれませんね。

関連するQ&A