• ベストアンサー

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

tsukasa-12rの回答

  • ベストアンサー
回答No.4

ダイアログが表示される前に次の処理が実行されているとのことですが、 SendKeys "^h",True にするとどうでしょうか? それでもダメなら hwnd=FindWindow(...) の戻り値が≠0になるまでループで hwnd=FindWindow(...) を繰り返し実行するという手もありますが、なんらかの理由でダイアログが表示されなかった場合、無限ループとなり応答なしになってしまうと思います。 ちなみに、私の環境(WindowsXP+Excel2003)では、 SendKeys "^h",True SendKeys "^h" いずれにせよダイアログは表示されませんでした。 仕方がないので、手で「検索と置換」のダイアログを表示させてから実行しましたら、DWL_DLGPROC だとうまくいきませんでしたが、GWL_WNDPROC (-4) に変更するとうまくいきました。ただし、Visual Basic Editor を表示させている状態で実行すると応答がなくなってしまいました。( Control+Break で停止しましたが )

SA---
質問者

お礼

ANo.3で教えて頂いたコードから下記3箇所を変えたら動きました。 Public Const GWL_WNDPROC As Long = -4 '追加行 OrgDlgProc = GetWindowLong(hWnd, GWL_WNDPROC) 'DWL_DLGPROCをGWL_WNDPROCに変更 Call SetWindowLong(hWnd, GWL_WNDPROC, AddressOf NewDlgProc) 'DWL_DLGPROCをGWL_WNDPROCに変更 また、SendKeysは関係なくDWL_DLGPROCを引数にしたせいでした ただ、ダイアログから実際の置換作業を使うことは出来ません。 しかし今回の事でサブクラス化を触りだけでも解かり,APIの難しさも分りました。 本当に、本当に、本当に、有難う御座いました。

関連する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ですが シート内ではゴシック体 ダイアログボックスでは明朝体が使われているようです これをゴシック体に統一できないものかとふと疑問に思いお尋ねします つまらないことのようですがどうぞよろしくお願いします