- 締切済み
EXCELのメッセージボックスについての質問です
いつもお世話になっております。 EXCELのメッセージボックスの表示される位置は 指定出来るのでしょうか? もし出来るのでしたら、その方法をおしえてください。 宜しくお願いします
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 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
- ttyp03
- ベストアンサー率28% (277/960)
指定は出来ないですね。 常に画面中央です。 位置を指定したいのであれば、独自にメッセージボックスを作ってしまうのがいいかと思います。