みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

こんばんは。
ExcelVBAを使用してファイル検索プログラムを作成したのですが、思うように動作させることができません。
作成したのは、セルに入力されているファイル名を取得して指定したドライブにファイルがあればそのファイルのパスを表示するプログラムです。
タイトルにあるように隠しファイルを検索することができません。

動作させたい環境は、
Windows98,Excel97
です。
(Windows2000,WindowsXPでExcel2000だと隠しファイルも検索することができました。)

自分で思いついて試してみたのは、
"Explorerの"フォルダオプション"-"表示"内の隠しファイルも表示するのチェックをOnにして検索プログラムを実行する"でしたがやはりだめでした。

どなたか解決方法をご存知の方がいらしたらご教授お願いできますでしょうか?
よろしくお願いいたします。

投稿日時 - 2005-07-19 01:19:18

QNo.1522906

すぐに回答ほしいです

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

>また、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技術を利用していると仮定しての実験ですが・・・
※はずしていたらすいません。

投稿日時 - 2005-07-19 21:39:36

お礼

こんばんは。
回答が遅くなってすみません。
結論から言うと、他の人がVBで作ったツールを使って作業をすることになりました。

'隠しフォルダ取得テスト'の件ですが、Windows98SE,Excel97の環境で使用してみたところ'True'が2回表示されました。
FileSearchがFSOを使用しているのかは正直はっきりとはわからないのですが、今回の件はOfficeの仕様の問題ではないかと私も思います。
1050\さんが参考として載せてくれたMSのページに"Office.FileSearch"と書いてあるので"FileSearch"は"Office"特有のオブジェクトなのだと理解しました。

そういった理由から今回はVBのツールで作業を行うことにしました。

今回の件は大変勉強になりました。
丁寧にアドバイスして大変感謝です。

投稿日時 - 2005-07-20 19:42:09

ANo.4

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.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" と出せます。

投稿日時 - 2005-07-19 23:09:00

お礼

こんばんは。
回答が遅くなってすみません。
結論から言うと、他の人がVBで作ったツールを使って作業をすることになりました。

>FileSearch オブジェクト直接ではありませんが、同じ機能を使っている、Officeの検索機能が使えなくなった話をみています。

の件ですが、
1050\さんが参考として載せてくれたMSのページに"Office.FileSearch"と書いてあるので"FileSearch"は"Office"特有のオブジェクトなのだと思います。
また、"Dir"の使用に関してですが別の人がVBで既にツールを作っていたこともありツールの作成時間なども考えてそちらを使うことにしました。

今回の件は大変勉強になりました。
丁寧にアドバイスして大変感謝です。

投稿日時 - 2005-07-20 19:49:58

ANo.3

OSによって違う。
環境によって違う。

から想像すると、、、

1.Officeにパッチをあてる。
2.Windowsアップデートをあてる。

#2さんも環境を持っているようだし、質問者のOSのバージョンとOfficeのバージョンをそれぞれ書いてみては?
※バージョン=サービスパック状況を含む

投稿日時 - 2005-07-19 19:49:00

補足

こんばんは。アドバイスありがとうございます。

>1.Officeにパッチをあてる。
>2.Windowsアップデートをあてる。

もっともだと思いますが、"社内の数百台のPC内部監査で使用している(もちろんPCは98系ばかりではありませんし、どちらかというと少数派です)"・"管理者がアップデートをすることによって今まで動いていた環境が変わることを嫌っている"こともありなかなか即決できない状況です。

また、FileSystemObjectを使用することに関してですが私とは別の人がFileSystemObjectを使用してVBでツールを作ったのですがこちらのが検索時間が短かったため私のを使うということになりました。

いまさらながらの長々とした状況説明になってしまって申し訳ないです。

ちなみにOSとOfficeのバージョンですが、Windows98SE,Excel97 SR-2です。

投稿日時 - 2005-07-19 20:22:39

ANo.2

こんにちは。
Excel 97 で、FileSearch を使用してチェックしてみましたが、問題ありません。隠し属性のファイルを検索できます。

>"Explorerの"フォルダオプション"-"表示"内の隠しファイルも表示するのチェックをOnにして検索プログラムを実行する"でしたがやはりだめでした。

一度、[スタート]-[設定]-[フォルダオプション]-[表示]で、設定しなおしてみてください。それで、ダメなら、コードを公開してください。

投稿日時 - 2005-07-19 17:31:59

補足

こんにちは。アドバイスを参考にフォルダオプションを設定みたのですが、やはりだめでした。
該当する箇所のコードを公開しますのでもし何かアドバイスなどがあったらお願いいたします。

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

投稿日時 - 2005-07-19 18:56:05

ANo.1

.SearchSubFolders = True
.FileType = msoFileTypeAllFiles

を追加してダメなら、FileSearchの仕様なのでしょう。

FileSystemObjectを使用するなりの、別方法を考える必要があるかもしれませんね。

投稿日時 - 2005-07-19 16:17:08

あなたにオススメの質問