Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3728 / 13646 ツリー ←次へ | 前へ→

【60454】検索結果ウィンドウを表示できますか yuka 09/2/23(月) 12:09 質問[未読]
【60456】Re:検索結果ウィンドウを表示できますか neptune 09/2/23(月) 12:59 回答[未読]
【60459】Re:検索結果ウィンドウを表示できますか ichinose@仕事中寄り道 09/2/23(月) 13:40 発言[未読]
【60469】Re:検索結果ウィンドウを表示できますか yuka 09/2/23(月) 14:39 質問[未読]
【60474】Re:検索結果ウィンドウを表示できますか yuka 09/2/23(月) 16:09 お礼[未読]
【60475】Re:検索結果ウィンドウを表示できますか neptune 09/2/23(月) 16:34 発言[未読]
【60503】Re:検索結果ウィンドウを表示できますか Abyss 09/2/25(水) 2:14 回答[未読]
【60492】Re:検索結果ウィンドウを表示できますか ichinose 09/2/24(火) 6:54 発言[未読]

【60454】検索結果ウィンドウを表示できますか
質問  yuka  - 09/2/23(月) 12:09 -

引用なし
パスワード
   Excel限定のvbaというわけではないですが、Excelで開発中でしたので、質問させていただきます。
vbaを利用して、Windowsの検索結果ウィンドウを表示することは可能でしょうか。
指定フォルダ内のワイルドカード指定されたファイルの一覧を簡単に表示できないものかと考えておりました。
現在は、shellでexplorerの指定フォルダ開いて、後は人の手で右クリック→検索としています。

ご存知のかたがおりましたら、よろしくお願いします。

【60456】Re:検索結果ウィンドウを表示できますか
回答  neptune  - 09/2/23(月) 12:59 -

引用なし
パスワード
   ▼yuka さん:
こんにちは

開発経験があるようなのでそれなりに書きます。

>vbaを利用して、Windowsの検索結果ウィンドウを表示することは可能でしょうか。
「Windowsの検索結果ウィンドウ」のみの表示は知りませんが、
同等なものなら可能です。あれはListViewですから。

>指定フォルダ内のワイルドカード指定されたファイルの一覧を簡単に表示できないものかと考えておりました。
人によって簡単のレベルが違いますが、同じような仕様にすると
余り簡単とも思いません。やはりそれなりに面倒です。

>現在は、shellでexplorerの指定フォルダ開いて、後は人の手で右クリック→検索としています。
例えば検索条件を入力できるUserFormを作成し、検索して、
ListViewに表示させるだけです。

ライセンスに関しては詳しくわかりませんので自分で調べて下さい。
多分OSかOfficeについているので個人的に使用する分には問題ないとは思いますが。。(昔は付いていましたんで。)

【60459】Re:検索結果ウィンドウを表示できますか
発言  ichinose@仕事中寄り道  - 09/2/23(月) 13:40 -

引用なし
パスワード
   こんにちは。

Public Declare Function BringWindowToTop Lib "USER32" (ByVal hWnd As Long) As Long
Sub main()
  Dim wn As Object
  Dim shll As object
  Set shll = CreateObject("shell.application")
  shll.FindFiles
  Application.Wait Now() + TimeValue("00:00:01")
  For Each wn In shll.Windows
    DoEvents
    If wn.locationname = "検索結果" Then
     BringWindowToTop wn.hWnd
     Exit For
    End If
    Next
End Sub

ちょこっと試しただけですが・

【60469】Re:検索結果ウィンドウを表示できますか
質問  yuka  - 09/2/23(月) 14:39 -

引用なし
パスワード
   ▼ichinose@仕事中寄り道 さん:

サンプルソースまでいただきまして、ありがとうございます。

この中にある、FindFilesが検索画面を表示しているようですが、ここにファイルのパスや、検索対象名を入れるにはどうしたら良いでしょうか。

【60474】Re:検索結果ウィンドウを表示できますか
お礼  yuka  - 09/2/23(月) 16:09 -

引用なし
パスワード
   (自己レスです)
neptuneさん、ichinose@仕事中寄り道さん、ご回答ありがとうございました。
お二人のご回答後いろいろ調べておりましたが、本意ではないですがFileSerachオブジェクトなるもので実現できそうです。

いったんcloseさせていただきますが、もし、Windowsの検索画面に検索条件を渡す(つまり検索結果画面を表示する)ことをご存知の方がおりましたら、引き続きご教示いただけると幸いです。

【60475】Re:検索結果ウィンドウを表示できますか
発言  neptune  - 09/2/23(月) 16:34 -

引用なし
パスワード
   ▼yuka さん:
これでおしまいにしますが、

>この中にある、FindFilesが検索画面を表示しているようですが、ここにファイルのパスや、検索対象名を入れるにはどうしたら良いでしょうか。
APIゴリゴリです。

検索画面内の、条件を入力する場所(コンボボックス内のEditになるのかな)
に条件を入力し、後必要な場所にも入力、検索ボタンを押す処理。
を書いてやればできます。

まぁこれの方が格好は良いですが。。。。
上記の手法の情報だけで自作できるのなら別ですが、最初に私が書いたように
自作した方が、作成ははるかに簡単ですよ。

検索画面操作は自分でSDKで書くのと同じ処理を書かなければならないの
ですから、それなりの経験は必要です。

おしまい。

【60492】Re:検索結果ウィンドウを表示できますか
発言  ichinose  - 09/2/24(火) 6:54 -

引用なし
パスワード
   おはようございます。

>この中にある、FindFilesが検索画面を表示しているようですが、ここにファイルのパスや、検索対象名を入れるにはどうしたら良いでしょうか。

結局、Sendkeysを使う方法しか調べられませんでした。
きちんとテストすると、不安定かも・・・。


参照設定で「Microsoft Forms 2.0 Object Library」をチェックしてください

Option Explicit
Public Declare Function BringWindowToTop Lib "USER32" (ByVal hWnd As Long) As Long
'====================================================================
Sub main()
  Call kensaku("excel","d:")

End Sub
'=======================================================================
Sub kensaku(ByVal flnm, Optional ByVal path)
'flnm 検索ファイル文字列
'path 検索パス
  Dim ie As Object
  Dim ok As Boolean
  Dim dto As New DataObject
  Dim wn As Object
  Set ie = CreateObject("InternetExplorer.application")
  With ie
    .Visible = True
    On Error Resume Next
    .ExecWB 32, 0
    .Quit
  End With
  DoEvents
  With CreateObject("shell.application")
    ok = False
    Do Until ok
      For Each wn In .Windows
       DoEvents
       If wn.locationname = "検索結果" Then
         ok = True
         Exit For
       End If
      Next
    Loop
  End With
  BringWindowToTop wn.hWnd
  With Application
    dto.SetText flnm
    dto.PutInClipboard
    .SendKeys "^v", True
    DoEvents
    If Not IsMissing(path) Then
     dto.Clear
     dto.SetText path
     dto.PutInClipboard
     .SendKeys "%l", True
     DoEvents
     .SendKeys "^v", True
     DoEvents
    End If
    .SendKeys "{ENTER}", True
    DoEvents
  End With
End Sub


簡単なテストしかしてませんが・・・。
ちょっと、使いづらいなあ・・・。

【60503】Re:検索結果ウィンドウを表示できますか
回答  Abyss  - 09/2/25(水) 2:14 -

引用なし
パスワード
   検索対象Folder指定なら割と簡単に出来るはずです。
例えば、

  CreateObject("Shell.Application") _
    .ShellExecute "C:\", , , "find", 1&

な感じで。しかし、検索文字列まで指定するのなら
これでは無理ですね。
APIのShellExecuteEx関数など使う事になるでしょう。

3728 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free