- 締切済み
EXCELのメッセージボックスについての質問です
Wendy02の回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 MsgBox の位置は、以下のようにして設定しますが、あまりお勧めしません。 私などは、レイアウトがきれいに出せるダイアログシートを代用したりしますが、一般的にはUserform がお勧めです。以下のコードは、一応、試験済みですが、バージョンによって達成されないこともありますし、また、Excelがハングするリスクが伴います。 参考: http://support.microsoft.com/kb/180936/ja '<標準モジュール> Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Public Declare Function UnhookWindowsHookEx Lib "user32" ( _ ByVal hHook As Long) As Long Public Declare Function GetWindowLong Lib "user32" Alias _ "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Public Declare Function GetCurrentThreadId Lib "kernel32" () As Long Public Declare Function SetWindowsHookEx Lib "user32" Alias _ "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _ ByVal hmod As Long, ByVal dwThreadId As Long) As Long Public Declare Function SetWindowPos Lib "user32" ( _ ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _ ByVal x As Long, ByVal y As Long, ByVal cx As Long, _ ByVal cy As Long, ByVal wFlags As Long) As Long Public Declare Function GetWindowRect Lib "user32" (ByVal hWnd _ As Long, lpRect As RECT) As Long 'Office 2000以下用 Public Declare Function FindWindow Lib "user32" _ Alias "FindWindowA" (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Public Const GWL_HINSTANCE = (-6) Public Const SWP_NOSIZE = &H1 Public Const SWP_NOZORDER = &H4 Public Const SWP_NOACTIVATE = &H10 Public Const HCBT_ACTIVATE = 5 Public Const WH_CBT = 5 Public msg_Left As Long Public msg_Top As Long Public hHook As Long Function CBTProc(ByVal lMsg As Long, ByVal wParam As Long, _ ByVal lParam As Long) As Long If lMsg = HCBT_ACTIVATE Then 'メッセージボックスの位置決め SetWindowPos wParam, 0, msg_Left, msg_Top, 0, 0, _ SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOACTIVATE 'CBT hookのリリース UnhookWindowsHookEx hHook End If CBTProc = False End Function Public Sub SetMsgBox(Left As Long, Top As Long) Dim hInstance As Long Dim ThreadID As Long Dim hWnd As Long hWnd = FindWindow("XLMAIN", Application.Caption) '2002 以上は、me.hWnd で取れる hInst = GetWindowLong(hWnd, GWL_HINSTANCE) Thread = GetCurrentThreadId() msg_Left = Left msg_Top = Top HookHandle = SetWindowsHookEx(WH_CBT, AddressOf CBTProc, hInstance, ThreadID) End Sub Sub MsgboxShowLocate() Dim x As Long Dim y As Long x = 0 'MsgBox の横位置 y = 0 'MsgBoxの縦位置 SetMsgBox x, y MsgBox "(" & x & "," & y & ") の位置に設定されています。" End Sub
関連するQ&A
- メッセージボックスの非モーダル化について
VB6のメッセージボックスは原則アプリケーションモーダルで表示されますよね? 引数に指定可能なvbApplicationModalの値は0なので非モーダル表示は不可能ではないか?と思います。 しかし、なんらかのトリックを使ってこのメッセージボックスを非モーダル表示させる方法はないものでしょうか? ヒントでも結構なのでよろしくお願いします。
- ベストアンサー
- Visual Basic
- エクセル メッセージボックスについて
入力規則でメッセージボックスを表示するようにしています。 いつも出てくる場所がセルC8辺りなのですが、アクティブセルの近くに表示されるようなことは出来ないのでしょうか? マクロやVBAは、わらないので簡単にできる方法でお願いします。 もし、出来なければ出来ない旨、教えていただけるとうれしいです。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- VBAにてメッセージボックスを最前面に表示させる
エクセルVBAにて、指定時刻になったらメッセージボックスを、最前面に表示させるプログラムを作成中です。 時刻の指定は、ontimeメソッドの使用でできました。 しかし、最前面(他のアプリケーションを開いていても、メッセージボックスが手前に表示される)がどうしてもできません。。 VBだとAPI関数を使って、フォームを常に最前面表示はできました。 メッセージボックスで、このような表示方法は実現可能なのでしょうか? どなたか教えて下さい。よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- Excel VBAメッセージボックスの表示位置が右下になってしまう
ExcelのVBAでメッセージボックスを作成しましたが、 表示される位置がなぜが画面右下の端っこになってしまいます。 通常通り画面中央にメッセージボックスが表示されるにはどうすればよいでしょうか? またこうなってしまった原因はなんでしょうか? VBA初心者です。よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- メッセージボックスの表示位置について
WindowsAPI(C言語)でメッセージボックスの表示位置を変更したいと思っています。 ダイアログボックスはSetWindowPosで変更できたのですが、メッセージボックスの表示位置が変更できずに困っています。 何か良いAPIや、実装方法などがありましたらご教授ください。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- メッセージボックスの再表示の方法
エクセルでメッセージボックスの再表示方法を教えてください。 メッセージボックスで「今後この表示を表示しない」にチェックを入れてしまい、表示されなくなったのですが、再表示したい思っています。 どのようにしたらよろしいでしょうか? よろしくお願いします。
- 締切済み
- オフィス系ソフト
- VBAのメッセージボックスで%表示
お世話になります。 VBAにて、算出されたある数字をメッセージボックスで %表示したいのですが、エクセルシートであれば、表示させる セルを決め、そのセルの表示形式を「パーセンテージ」にすれば いいのですが、メッセージボックスで表示させたいのです。 可能なのかどうか分かりませんが、ご教示頂きたく宜しく お願い申し上げます。
- ベストアンサー
- Visual Basic
- VAB:メッセージボックスの色について
VBAのコードの中で、 MsgBox "めっせーじ" と打つとメッセージボックスが表示されますが、 この時表示されるメッセージボックスの、 ・タイトルバー?の色(XPのデフォルトは青か) ・タイトル(Microsoft Excelと出ている) ・背景色(デフォルトは灰色?) を指定することはできますか? Windowsの「画面のプロパティ」だと全てのウィンドウの色が変わってしまいますが、 このコードを実行した時に表示するメッセージボックスだけ変更、という操作は可能でしょうか。
- ベストアンサー
- オフィス系ソフト
- メッセージボックスの表示
エクセル2000のVBAでメッセージボックスを表示させたいのですが、OKボタンを押して閉じるのではなく、VBAの記述でメッセージをオープン、クローズがしたいのですが、方法がわかりません。 何がしたいかというと、 FOR~NEXTなどの処理で今何件処理しているかをリアルタイムで表示させたいのです。 どなたか知っている方がいれば教えてください。
- ベストアンサー
- その他(プログラミング・開発)
- Excelメッセージボックス
改ページプレビューを行なったときに既定値で 表示されるメッセージボックスですが、チェックを入れて「次回から表示しない」にした場合、再度表示されるようにするにはどうしたらよいのでしょうか?
- 締切済み
- オフィス系ソフト