• ベストアンサー

検索マクロの終了について

台帳からの検索方法として、ご教示いただいた下記のマクロを使用させていただいていますが、検索終了後において、「閉じる」か「×」をクリックし検索を終了させないと先にすすみません。 この、「閉じる」か「×」のクリックをしないで、何処でもセルをクリックすると検索が終了するようには出来ないものでしょうか。 チョッとしたことですが、検索行為の度に、非常に不便に感じております。 どなたか、よろしく、お願いいたします。 Sub Sample1() ' // ダミー検索 ' // MatchByte:全角・半角を区別する Range("A8:C1700").Select ActiveCell.Find What:=ActiveCell.Value, _ LookIn:=xlValues, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchByte:=False ' // 検索ダイアログ表示 Application.Dialogs(xlDialogFormulaFind).Show End Sub

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

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

こんにちは。 あくまでも、Excel 2003 以上に限定させていただきます。 >検索行為の度に、非常に不便に感じております。 「非常に不便」というほどに感じません。ダイアログ自体を出すことに問題がないかとも思いますが、それはともかく、質問に出されたコード自体が、少し不可解な点があります。 「ダミー検索」の意味はご存知ですか?分かっていればよいのですが、しかし、全体的には、そのコードの意味が分かっていないようです。「ダミー検索」で使ったオブジェクトとは、別の物を立ち上げても仕方がありません。 ActiveCell.Findと、 Application.Dialogs(xlDialogFormulaFind).Show は、連結していません。それには、モーダルモードはオフにならないのですから、セルにクリック自体がきかないのではありませんか?なぜ、この古いダイアログしかないのか、私は良く分かりません。新しいダイアログを探したのですが、見つかりませんでした。しかたがないので、メニューから使うしかありません。 '------------------------------------------- '標準モジュール '------------------------------------------- 'Option Explicit Public Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _    ByVal hWnd1 As Long, _    ByVal hWnd2 As Long, _    ByVal lpsz1 As String, _    ByVal lpsz2 As String) As Long Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _    ByVal hWnd As Long, _    ByVal wMsg As Long, _    ByVal wParam As Long, _    lParam As Any) As Long Public Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" ( _    ByVal hWnd As Long, _    ByVal wMsg As Long, _    ByVal wParam As Long, _    ByVal lParam As Long) As Long Public Const WM_SETTEXT = &HC Public Const VK_ESC As Long = &H1B Public Const WM_KEYDOWN As Long = &H100 Sub FindMacroSample1()   Dim msg As String   Dim hWnd As Long   Dim hWnd_ As Long   'ダミー検索   ActiveSheet.Cells.Find "", , -4163, 2, 1, 0, 0, 1 'ダミーで、全角・半角を区別する      Range("A8:C1700").Select   '検索ダイアログ表示   msg = ActiveCell.Value   Application.CommandBars.FindControl(, 1849).Execute   If Len(msg) = 0 Then Exit Sub   hWnd = FindWindowEx(0&, 0&, "bosa_sdm_XL9", "検索と置換")   hWnd_ = FindWindowEx(hWnd, 0&, "EDTBX", vbNullString)   msg = Trim(msg)   If Len(msg) < 256 Then     Call SendMessage(hWnd_, WM_SETTEXT, 0&, ByVal msg)   End If End Sub '------------------------------------------- 'シートモジュール '------------------------------------------- Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim hWnd As Long  hWnd = FindWindowEx(0&, 0&, "bosa_sdm_XL9", "検索と置換")  If hWnd <> 0 Then   Call PostMessage(hWnd, WM_KEYDOWN, VK_ESC, 0&)  End If End Sub

hijtxa
質問者

お礼

お礼が遅れました、申し訳ありません。 ActiveCell.Findと、 Application.Dialogs(xlDialogFormulaFind).Show は、連結していないということで、わかりました。 また、当方使用はExcel 2000ですから、ご教示いただいたものは、 今後の参考とさせていただきます。 本当にありがとうございました。

その他の回答 (1)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

Escキーでダイアログが閉じますがそれでは駄目ですか?

hijtxa
質問者

お礼

お礼が送れて申し訳ありません。 早速の教示ありがとうございました。

関連するQ&A