

こんばんは。
ExcelVBAを使用してファイル検索プログラムを作成したのですが、思うように動作させることができません。
作成したのは、セルに入力されているファイル名を取得して指定したドライブにファイルがあればそのファイルのパスを表示するプログラムです。
タイトルにあるように隠しファイルを検索することができません。
動作させたい環境は、
Windows98,Excel97
です。
(Windows2000,WindowsXPでExcel2000だと隠しファイルも検索することができました。)
自分で思いついて試してみたのは、
"Explorerの"フォルダオプション"-"表示"内の隠しファイルも表示するのチェックをOnにして検索プログラムを実行する"でしたがやはりだめでした。
どなたか解決方法をご存知の方がいらしたらご教授お願いできますでしょうか?
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
>また、FileSystemObjectを使用することに関してですが私とは別の人がFileSystemObjectを使用してVBでツールを作ったのですがこちらのが検索時間が短かったため私のを使うということになりました。
でももしかしたら、検索はFSOを利用しているかもしれません。
http://www.microsoft.com/japan/msdn/library/defa …
※最初の説明と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技術を利用していると仮定しての実験ですが・・・
※はずしていたらすいません。
こんばんは。
回答が遅くなってすみません。
結論から言うと、他の人がVBで作ったツールを使って作業をすることになりました。
'隠しフォルダ取得テスト'の件ですが、Windows98SE,Excel97の環境で使用してみたところ'True'が2回表示されました。
FileSearchがFSOを使用しているのかは正直はっきりとはわからないのですが、今回の件はOfficeの仕様の問題ではないかと私も思います。
1050\さんが参考として載せてくれたMSのページに"Office.FileSearch"と書いてあるので"FileSearch"は"Office"特有のオブジェクトなのだと理解しました。
そういった理由から今回はVBのツールで作業を行うことにしました。
今回の件は大変勉強になりました。
丁寧にアドバイスして大変感謝です。
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" と出せます。
こんばんは。
回答が遅くなってすみません。
結論から言うと、他の人がVBで作ったツールを使って作業をすることになりました。
>FileSearch オブジェクト直接ではありませんが、同じ機能を使っている、Officeの検索機能が使えなくなった話をみています。
の件ですが、
1050\さんが参考として載せてくれたMSのページに"Office.FileSearch"と書いてあるので"FileSearch"は"Office"特有のオブジェクトなのだと思います。
また、"Dir"の使用に関してですが別の人がVBで既にツールを作っていたこともありツールの作成時間なども考えてそちらを使うことにしました。
今回の件は大変勉強になりました。
丁寧にアドバイスして大変感謝です。
No.3
- 回答日時:
OSによって違う。
環境によって違う。
から想像すると、、、
1.Officeにパッチをあてる。
2.Windowsアップデートをあてる。
#2さんも環境を持っているようだし、質問者のOSのバージョンとOfficeのバージョンをそれぞれ書いてみては?
※バージョン=サービスパック状況を含む
この回答への補足
こんばんは。アドバイスありがとうございます。
>1.Officeにパッチをあてる。
>2.Windowsアップデートをあてる。
もっともだと思いますが、"社内の数百台のPC内部監査で使用している(もちろんPCは98系ばかりではありませんし、どちらかというと少数派です)"・"管理者がアップデートをすることによって今まで動いていた環境が変わることを嫌っている"こともありなかなか即決できない状況です。
また、FileSystemObjectを使用することに関してですが私とは別の人がFileSystemObjectを使用してVBでツールを作ったのですがこちらのが検索時間が短かったため私のを使うということになりました。
いまさらながらの長々とした状況説明になってしまって申し訳ないです。
ちなみにOSとOfficeのバージョンですが、Windows98SE,Excel97 SR-2です。
No.2
- 回答日時:
こんにちは。
Excel 97 で、FileSearch を使用してチェックしてみましたが、問題ありません。隠し属性のファイルを検索できます。
>"Explorerの"フォルダオプション"-"表示"内の隠しファイルも表示するのチェックをOnにして検索プログラムを実行する"でしたがやはりだめでした。
一度、[スタート]-[設定]-[フォルダオプション]-[表示]で、設定しなおしてみてください。それで、ダメなら、コードを公開してください。
この回答への補足
こんにちは。アドバイスを参考にフォルダオプションを設定みたのですが、やはりだめでした。
該当する箇所のコードを公開しますのでもし何かアドバイスなどがあったらお願いいたします。
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Excel(エクセル) Excelを開くとエラーが出る 2 2022/10/03 16:13
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Windows 95・98 再質問 5 2022/11/29 08:58
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- 法人税 電子帳簿保存法について 1 2022/04/07 11:17
- Windows 10 別ユーザーでログインした際、表示されないのソフトの探し方 1 2022/07/15 10:26
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
動かなくなってしまった古いVBA...
-
FTP対応のアプリケーション
-
VBAでCSVファイルを読み込もう...
-
Wordのプロパティ・総ページ数...
-
タイムスタンプの更新の方法2
-
vbaサブフォルダーをワイルドカ...
-
ExcelVBA 文字コード変換
-
webブラウザからローカルファイ...
-
EXCEL VBAを使ったファイル解析...
-
VB.net XMLの作成方法 Iniの代替
-
更新日が指定日以降のファイル取得
-
「エクセルファイルが開いてい...
-
【ACCESS VBA】アクセスからデ...
-
Long型で表現できないファイル...
-
FileDialog オブジェクトでファ...
-
ファイルを開く時間測定のスク...
-
excel マクロ PDF化の際のエラ...
-
Accessのウインドウサイズの固定
-
「AccessViolationException」...
-
エクセルのVBAで開いている...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動かなくなってしまった古いVBA...
-
vbaサブフォルダーをワイルドカ...
-
サブフォルダ含むフォルダ内の...
-
VBAでフォルダ内のhtmlファイル...
-
Accessのウインドウサイズの固定
-
複数のワークブックのVBAを変更...
-
VB6でUTF-8ファイルの読取りを
-
FileDialog オブジェクトでファ...
-
「エクセルファイルが開いてい...
-
excel マクロ PDF化の際のエラ...
-
AccessからOLEオブジェクト型の...
-
Wordのプロパティ・総ページ数...
-
ffftpでファイル取得が0バイト...
-
VBからExcelファイルを開くとき...
-
webブラウザからローカルファイ...
-
VBAでCSVファイルを読み込もう...
-
コモンダイアログでフォルダを...
-
VB.net XMLの作成方法 Iniの代替
-
ExcelVBA 文字コード変換
-
EXCEL VBAを使ったファイル解析...
おすすめ情報