-PR-
解決済み

Excelで検索、その後

  • 困ってます
  • 質問No.38626
  • 閲覧数1118
  • ありがとう数2
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 87% (47/54)

 過去に、Excelファイルから外部ファイルを検索するダイアログの呼出方法をこのサイトで教わった者です。
以下にそのソースを書きます。

Option Explicit

Private Declare Function ShellExecute Lib _
"Shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Const SW_SHOWNORMAL = 1
Private Const SW_SHOWMINIMIZED = 2
Private Const SW_SHOWMAXIMIZED = 3
Private Const SW_SHOW = 5
Private Const SW_MINIMIZE = 6
Private Const SW_SHOWMINNOACTIVE = 7
Private Const SW_SHOWNA = 8
Private Const SW_RESTORE = 9
Private Const SW_SHOWDEFAULT = 10

Sub 検索ダイアログを出す()
ShellExecute 0, "find", "C:\", vbNullString, vbNullString, SW_SHOWNORMAL
End Sub

 
 このダイアログを呼び出すと同時に、検索結果を表示する事は可能でしょうか?

 なんとか自分で解釈してこれを行いたかったのですが、
時間ばかりが進んで上手く行きません。

 vbNullStringの部分にstring型のデータを代入すれば動くと信じていたのですが、ダイアログ出現寺に表示もされないので、更に突っ込んだ検索結果表示なんて夢のまた夢(^^;;;)。

 宜しくお願いしますm(_ _)m。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル13

ベストアンサー率 46% (643/1383)

ファイル検索画面の使い方は知りませんが、とりあえずはファイルの検索機能があれば良いんですよね?

以下、フォルダの再帰検索を行うコードの例です。
参考にするなり、改造して使うなりしてください。
適当に作ったものなので、バグが残ってるかもしれません。

'使い方
Public Sub SrchSYSFile()
  Dim Found() As String
  Dim i As Long
  ReDim Found(0)
  Call QueryFile("C:\Windows\", "*.SYS", Found())
  For i = 1 To UBound(Found())
    Debug.Print Found(i)
  Next i
End Sub

'コード例
Public Function QueryFile(StartPath As String, SearchFileName As String, ByRef Found() As String)
'フォルダの再帰検索を行い、Foundに格納する
'Found(0)は空文字列になるが、これは仕様
  Dim FldName As String
  Dim Files As Collection
  Dim FileName As String
  Dim FoundCt As Long
  Dim i As Long
  Dim Folders() As String
  Dim FolderCt As Long
  
  On Error Resume Next
  
'現在のフォルダに対象ファイルが含まれているかを調べ、あれば、一覧に追加
  FileName = ""
  FileName = Dir(StartPath & SearchFileName, vbNormal + vbHidden + vbSystem)
  FoundCt = UBound(Found)
  Do Until FileName = ""
    FoundCt = FoundCt + 1
    ReDim Preserve Found(FoundCt)
    Found(FoundCt) = StartPath & FileName
    FileName = ""
    FileName = Dir()
  Loop
  
'現在のフォルダに含まれるフォルダの一覧を取得
  FolderCt = -1
  ReDim Folders(0)
  FldName = ""
  FldName = Dir(StartPath & "*.*", vbDirectory)
  Do Until FldName = ""
    If FldName <> "." And FldName <> ".." Then
      If (GetAttr(StartPath & FldName) And vbDirectory) = vbDirectory Then
        FolderCt = FolderCt + 1
        ReDim Preserve Folders(FolderCt)
        Folders(FolderCt) = StartPath & FldName & "\"
      End If
    End If
    FldName = ""
    FldName = Dir()
  Loop
  
'取得したフォルダに対して、再帰検索を行う
  For i = 0 To FolderCt
    Call QueryFile(Folders(i), SearchFileName, Found())
  Next i

End Function
お礼コメント
webdiver

お礼率 87% (47/54)

 ありがとうございまいた。お礼が遅れてごめんなさい。
「再帰」はちょっとだけかじった事があるのですが、その辺の記憶を呼び起こしつつ、頂いたソースを解釈してゆきたいと思います。
投稿日時 - 2001-02-21 17:06:18
-PR-
-PR-
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ