• ベストアンサー

モードレスダイアログを閉じた時の判断(API)

tsukasa-12rの回答

回答No.3

今、確認できる環境がありませんので、動作未確認です。 (お正月休みが明けるまで確認できません。) 応答なしや異常終了になる可能性がありますので十分ご注意の上、自己責任において実行してください。 '標準モジュールで記述 Public Const DWL_DLGPROC As Long = 4 Public OrgDlgProc As Long Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" _ (ByVal hWnd As Long, ByVal nIndex As Long) As Long Public Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" _ (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Const WM_DESTROY As Long = 2 Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Function NewDlgProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long   If uMsg = WM_DESTORY Then     'ダイアログが閉じられる時   End If   NewDlgProc = CallWindowProc(OrgDlgProc, hWnd, uMsg, wParam, lParam) End Function '実行ボタンのモジュール Private Sub CommandButton1_Click()   Dim hWnd As Long   SendKeys "^h"   hWnd = FindWindow("bosa_sdm_XL9", "検索と置換")   If hWnd Then     OrgDlgProc = GetWindowLong(hWnd, DWL_DLGPROC)     If OrgDlgProc Then       Call SetWindowLong(hWnd, DWL_DLGPROC, AddressOf NewDlgProc)     End If   End If End Sub 見やすくするために、全角スペースでインデントしています。 前回の内容と異なっているところがあります。 FindWindowEx でなくても FindWindow で十分なので、FindWindow にしました。 WM_CLOSE は×ボタンやシステムメニューの「閉じる」の時のメッセージなので、WM_DESTROY にしました。

SA---
質問者

補足

やはり動きませんでした。 SendKeys "^h" でダイアログが立ち上がる前に、後のコードが流れてる可能性が有ります。 マクロ実行する前に「検索と置換」ダイアログを立ち上げても OrgDlgProcにゼロしか入らないので、SetWindowLongに行かない。 色々と有難う御座います。答えを知りたいですが、諦めるしかないかなと感じています。

関連するQ&A

  • 「FindFirstFile」APIで、検索にひっかからないファイルがある。

    お世話になります。 今、VBAで、自動的にファイルを操作するプログラムを 組んでいるのですが、通常エクスプローラー→検索で検索した時と、プログラム上で実行した時に、検索に引っかかったファイルの数の合計が相違していました(><)。 原因を追求すると、どうやら自分がAPIを使用して作成したプログラムの方は、英数のファイルは問題無いのですが、ひらがなのファイル名は検索の対象になっていないようなのです(:;)。 ふつうに"aaa.mpg"は検索にひっかかり、"あ.mpg"は検索の対象外になってしまいます・・。 これはAPIの仕様なのでしょうか?? それともどこかに設定があるのでしょうか? どなたかご教授下さい。

  • 【VBA】 VBAを使ってExcelにSendMessageしてメニューを実行したい

    エクセルにおいて、VBAを使ってExcelに対してSendMessageをおこないメニューを実行したいのですが、メニューのSendMessageの引数WPARAMとLPARAMに 何を渡せば良いのでしょうか?SPY++を使ってメニューを実行したときにExcelに送られるWM_COMMANDを監視していましたがWM_COMMANDが見つかりませんでした。 ご存知の方、ご教授お願いします。 ちなみに、オートシェイプ選択時に「書式」-「オートシェイプ」メニューを実行し、書式設定ダイアログが表示され、オートシェイプの書式設定を変更するのが目的です。(VBAを使って書式設定のダイアログを表示する必要あり) SendKeysステートメントを使ってやってみましたがダメでした。この場合、モードレスダイアログに書式設定するコマンドボタンを配置し、そのボタンをクリックしたときにSendKeysを実行するもので、モードレスダイアログを表示している間はキーがモードレスダイアログに送られると判断してSendKeysの使用はやめました。

  • エクセルシートへ検索ダイアログの貼り付け

    勝手な注文かもしれませんが、エクセル2007のシート上に「検索と置換」ダイアログを貼り付けることが出来るでしょうか。複数シートからデータを検索する際にCtrl+Fキーで検索すれば事足りるのですが、シート1に検索ダイアログボックスを作成したいと思い質問させて頂きました。宜しくお願いします。

  • マクロ(VBA)を中断中は、検索と置換は機能しない

    エクセル2010です。 マクロ(VBA)を中断中は、検索と置換は機能しないのでしょうか? VBAを中断させつつ、シート内を検索したいのですが、 うんともすんとも言いません。 マクロを実行してない時なら シート上に、ないならないとメッセージが表示されるはずなのですが、 マクロ中断中は表示されないのでしょうか?

  • 置換 音が鳴ってた気がするのですが

    エクセルなのですが 私の気のせいかもしれないのですが シートの値を検索と置換のダイアログボックスで置換した時とか 「○○件置換しました。」とか、音が鳴ってた気がするのですが 今やったら何もメッセージも音も出ませんでした。 マクロ中断中に実行したからでしょうか? ミュートにはなっていません。

  • 検索と置換とシートを行ったり来たりするショートカット

    業務で、検索と置換のダイアログと、シート間を行ったり来たりする業務があるのですが、Ctrl + F で検索した後、シートに戻る際マウスクリックを使うのが煩わしいのです 検索ダイアログは閉じたくないのでEsc以外で何かショートカットは存在しませんでしょうかよろしくお願いいたします 環境 WinXPsp3 EXCEL2003

  • 【VBA】エクセルで文字置換

    いまは1つ1つ手作業でしており時間が大変掛かっています。 VBAでやろうとしたものの挫折しております。 文字の置換を連続して、VBAで自動で出来ないかと思っております。 Sheet1に「商品名」と「商品説明」 Sheet2に「検索する文字」と「置換後の文字」 (やりたいこと) Sheet2の置換方法に従ってSheet1の文字を置換する Sheet2のすべての置換方法をSheet1のすべての商品(商品名、商品説明共に)に対して処理する 置換処理した後は、処理件数をSheet2のC列に入力する 可能であれば、教えて頂きたいと思います。 宜しくお願いします。

  • エクセル 置換について

    windowsXP office2003 exel を使用しています。 エクセルで置換をしようとすると、(置換対象文字があるにもかかわらず、)置換できません。 「置換対象のデータが見つかりません。検索対象のデータの書式と条件が正しく指定されているかどうか確認してください。・・・・・シートが保護されていないかどうか確認してください。」といったエラーメッセージが出てしまいます。 シートは既に編集可能なので保護されているとは思えないのですが。。。 置換が出来ないのは例えばE行とF行で、その他の行は置換可能なようです。 何か原因があるのでしょうか?

  • ユーザーフォームのキャプションに中国語を表示したい

    VBAのユーザーフォームのキャプション(タイトル)に中国語を表示する方法が分かりません。 VBEではコードに中国語の簡体字を入力できないので、ワークシートに中国語を入力しておいて、それをキャプションに表示させたいです。 ラベルのTextやコマンドボタンのCaptionにはこの方法で簡体字を表示できるのですが、ユーザーフォームのCaptionでは?に置換されてしまいます。

  • 検索と置換ダイアログのフォントの変更について

    Excelで検索と置換ダイアログボックスで使われているフォントは変えられないものでしょうか 私の場合Excel2010ですが シート内ではゴシック体 ダイアログボックスでは明朝体が使われているようです これをゴシック体に統一できないものかとふと疑問に思いお尋ねします つまらないことのようですがどうぞよろしくお願いします