A 回答 (2件)
- 最新から表示
- 回答順に表示
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
面一、面位置、つらいちについ...
-
すみません、PCの事で質問です ...
-
タロットのリーディングお願い...
-
彼に胸を見せました…
-
旅先で出会った、連絡先も知ら...
-
毎回、微妙に遅刻をする彼について
-
相談
-
「いつ来てくれますか?」の尊敬...
-
誘っておいて、すぐ断る人の心...
-
恋愛においてアプローチしても...
-
彼女に着信拒否されています。...
-
郵便局員さんに恋しました。
-
勘というか直感って当たると思...
-
職場で好きな人や気になる人が...
-
女性がお手紙くれる時ってどん...
-
ケンカして別れを告げられた相...
-
連絡先も知らないもう会えない...
-
突然嫌いな人(女性)から手紙渡...
-
酔ってる時とシラフの時とでは...
-
半年したら元彼氏に手紙を^^
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
面一、面位置、つらいちについ...
-
脚本、小説の原稿 縦位置、横...
-
位置度算出の質問です。 x.-0.1...
-
両耳で2連、3連するなら2連の2...
-
メフィスト賞のA4サイズ横位置...
-
『なき乎否乎』の意味は?
-
タロットのリーディングお願い...
-
タロット占いお願いします。 私...
-
タロットの解釈を教えてくださ...
-
タロット解釈
-
自動車セキュリティでの位置検...
-
アナログ腕時計の文字盤の読み方?
-
タロット初心者で、結果をご相...
-
EXCELのメッセージボックスにつ...
-
'01の、 ' をつける位置あって...
-
MID関数について
-
彼に胸を見せました…
-
誘っておいて、すぐ断る人の心...
-
毎回、微妙に遅刻をする彼について
-
女性がお手紙くれる時ってどん...
おすすめ情報