• 締切済み

EXCELのメッセージボックスについての質問です

いつもお世話になっております。 EXCELのメッセージボックスの表示される位置は 指定出来るのでしょうか? もし出来るのでしたら、その方法をおしえてください。 宜しくお願いします

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 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)
回答No.1

指定は出来ないですね。 常に画面中央です。 位置を指定したいのであれば、独自にメッセージボックスを作ってしまうのがいいかと思います。

関連するQ&A