電子書籍の厳選無料作品が豊富!

いつもお世話になっております。

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

A 回答 (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
    • good
    • 0

指定は出来ないですね。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!