- ベストアンサー
VBAでOUTLOOKでウィンドウを選択!新規メッセージ画面を最前面に表示する方法
- OUTLOOKでVBAを使用して、自動的に新規メッセージ画面を開く方法について説明します。
- 特定の新規メッセージ画面を最前面に表示する方法について検討しています。
- VBAを使用して、OUTLOOKでウィンドウを選択し、最前面に表示する方法について説明します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>フォームの背面→受信メールの背面→新規メールと表示されてしまいます。 UserForm は、また別問題です。今回の方法では、背面に回りません。Z オーダーを持たないからです。背面には回りませんので、最小化してみたら良いかと思います。 >メールの内容の必要な項目を取り込み、定型文で新規メールを作成。内容を確認し、手動にて送信しようとしています。 本当は、UserFormの立ち上げは不要だと思います。ただ、その話をしていくと、話が長引きそうです。 #1の補足の話全体の流れは、私の作ったものに似ていますが、それは、掲示板で提供出来る範囲を越えてしまいます。 '-------------- Dim oApp As Application Dim objMail As MailItem Const CLASSNAME As String = "rctrl_renwnd32" Set oApp = CreateObject("Outlook.Application") Set objMail = oApp.CreateItem(0) 'olMailItem=0 objMail.To = "宛先" objMail.Subject = "件名" objMail.Body = "本文の代入a" objMail.Display '新規メッセージ画面表示 UserForm1.Show vbModeless '-------------- 'ユーザーフォームモジュール Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long Private Declare Function CloseWindow Lib "user32.dll" (ByVal hWnd As Long) As Long Private Const WS_MINIMIZEBOX As Long = &H20000 Private Const WS_THICKFRAME As Long = &H40000 Private Const GWL_STYLE As Long = -16& Private hWnd As Long Private Sub UserForm_Initialize() '最小化ボタンを取り付ける Dim lngNewLong As Long Dim ret As Long Const strClassName = "ThunderDFrame" hWnd = FindWindow(strClassName, Me.Caption) lngNewLong = GetWindowLong(hWnd, GWL_STYLE) ret = SetWindowLong(hWnd, GWL_STYLE, _ lngNewLong Or _ WS_THICKFRAME Or _ WS_MINIMIZEBOX) ret = DrawMenuBar(hWnd) End Sub Private Sub UserForm_Activate() Dim ret As Long '縮小化 ret = CloseWindow(hWnd) End Sub
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
>OUTLOOKでVBAでマクロを組んでいます。 もし、そうなら、前面にくるはずですし、それに、すでに、Outlook内部で行っているのですから、オートメーションオブジェクトで、New Outlook.Application という必要性はないと思います。 ご質問の状態が良く分かりませんが、こういうことでしょうか? '// Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long Sub TeatMail() Dim oApp As Application Dim objMail As MailItem Dim hWnd As Long Const CLASSNAME As String = "rctrl_renwnd32" Set oApp = CreateObject("Outlook.Application") Set objMail = oApp.CreateItem(0) 'olMailItem=0 objMail.To = "宛先" objMail.Subject = "件名" objMail.Body = "本文の代入" objMail.Display '新規メッセージ画面表示 hWnd = FindWindow(CLASSNAME, vbNullString) If hWnd <> 0& Then SetForegroundWindow hWnd End If End Sub
補足
回答ありがとうございます。 遅くなりましたが補足させていただきます。 すいません上記のコード調べてみたのですが、私には難しくて理解できませんでした。 流れ&使用方法がわかりません。 F8キーで処理を1つ1つ追ってみましたが、『objMail.Display』でプロシージャが終了し新規メッセージ画面が表示されます。どんな処理をFindWindow、SetForegroundWindow は行っているのでしょうか? 今私のコードを具体的に言いますと、 objmail.To = "宛先" objmail.Subject = "件名" objmail.Body = "本文の代入" objmail.Display '新規メッセージ画面表示 UserForm.Show 処理の大まかな内容は、注文メールが届きます。 そのメールを開き内容を確認し、それに合わせてこのマクロを実行します。 メールの内容の必要な項目を取り込み、定型文で新規メールを作成。内容を確認し、手動にて送信しようとしています。 新規メールの作成画面を表示した後に、他のソフトにも必要項目をコピペする為にフォームを立ち上げます。このフォームにはこの必要事項をコピペしやすいようにテキストBOXに項目ごとに表示しています。コピペする前にメールを送信したい為メールの画面を最前面に表示したいと思っています。 フォームを表示しなければ、最前面に新規メールの画面が表示されるのですが、フォームを開くと、フォームの背面→受信メールの背面→新規メールと表示されてしまいます。 長い文章でわかりにくいかもしれないので質問はあのような質問にさせていただきました。 今の現状で解決できる事があればお願いします。