• ベストアンサー

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

tsukasa-12rの回答

回答No.2

モーダルの置換ダイアログではダメなんでしょうか? モードレスだと、保護の解除がされている間に好き勝手なことをされる可能性があるので、モーダルの方が良いのではないかと思いますけど。 モーダルのダイアログは Application.Dialogs(xlDialogFormulaReplace).Show で表示できると思います。 ちなみに、APIでモードレスダイアログの終了を検出するには、 1.hwnd=FindWindowEx(0,0,"bosa_sdm_XL9","検索と置換") でダイアログのウインドウハンドルを取得 2.OrgDlgProc=GetWindowLong(hwnd,DWL_DLGPROC) でダイアログプロシージャを取得 3.SetWindowLong(hwnd,DWL_DLGPROC,AddressOf NewDlgProc) で独自のダイアログプロシージャをセット 独自のダイアログプロシージャでは メッセージ=WM_CLOSE で判定し、プロシージャの最後で、CallWindowProcを使用して2.で取得したプロシージャを呼び出す。 という流れになると思います。(あまりおすすめできませんが) このAPIを使用した方法については、「サブクラス化」で検索すると参考になるサイトが見つかるんじゃないかと思います。 ユーザーフォームで置換ダイアログを作成できるなら、APIを使用するよりユーザーフォームでの作成をおすすめします。

SA---
質問者

補足

回答有難う御座います。 出来れば、実際に動くコードまで教えてください。 宜しくお願いします。 また、ユーザーフォームで作る方が良いと気づいたのですが API分らないので、これを機会にAPIを理解したいと思った次第です。 ヒントを頂いたのですが進みません。自分で考えれたのは下記迄です。 ---標準モジュール--------------------- 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 Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" ( _ ByVal hWnd As Long, _ ByVal nIndex As Long) As Long Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _ ByVal hWnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Public Const DWL_DLGPROC As Long = 4 -----以下実行ボタンのモジュール------------------- Private Sub CommandButton1_Click() Dim hWnd As Long Dim OrgDlgProc As Long ActiveSheet.Unprotect 'シート保護解除 SendKeys ("^h") '「検索と置換」ダイアログ表示 hWnd = FindWindowEx(0, 0, "bosa_sdm_XL9", "検索と置換") OrgDlgProc = GetWindowLong(hWnd, DWL_DLGPROC) ' 'ここからが分りません ' 'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 'シート保護 End Sub

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