
OUTLOOKでVBAでマクロを組んでいます。
自動的に新規メッセージ画面を開くように設定しています。
何枚もウィンドウが開かれているので、特定の新規メッセージ画面を最前面に表示する事はできないでしょうか?
イメージではexcelのsheetをfor each でworksheetsコレクションを全部検索し、activateするイメージです。
コードは簡単に下記のようにメッセージを作成しています。
Dim oApp As New Outlook.Application
Dim objmail As Object
Set oApp = CreateObject("Outlook.Application")
Set objmail = oApp.CreateItem(0) 'olMailItem=0
objmail.To = "宛先"
objmail.Subject = "件名"
objmail.Body = "本文の代入"
objmail.Display '新規メッセージ画面表示
わかりにくいかもしれませんがよろしくお願いします。
No.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
No.1
- 回答日時:
>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に項目ごとに表示しています。コピペする前にメールを送信したい為メールの画面を最前面に表示したいと思っています。
フォームを表示しなければ、最前面に新規メールの画面が表示されるのですが、フォームを開くと、フォームの背面→受信メールの背面→新規メールと表示されてしまいます。
長い文章でわかりにくいかもしれないので質問はあのような質問にさせていただきました。
今の現状で解決できる事があればお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) Excel・ユーザーフォームの情報を受け渡したい 4 2022/06/08 10:11
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) エクセル VBA メール本文に指定セルに記載されているURLをリンクとして記載する方法 8 2022/08/08 07:50
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- その他(Microsoft Office) VBA メール送信済で実行されるはずが、実行されない時があります。 2 2023/02/02 14:05
- Visual Basic(VBA) VBA初心者です。 2 2022/10/10 11:52
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メールの宛先の「リソース」とは
-
宛先の順番が入れ替わってしまう。
-
CCを日本語で言うと?
-
Outlook で宛先が複数の場合の人数
-
BCCで送信、宛先は空欄
-
宛先が、recipients not specif...
-
アンダーバーが表示されない
-
Outlookで自分(Outlookのメルア...
-
Outlook2019の宛先表示について
-
宛先とCCの違いは何でしょうか。
-
メールの宛先リストのグループ化
-
Becky!の送信フォルダのレイアウト
-
auの一斉送信の仕方
-
EXCELマクロで複数のEMAIL宛先...
-
サンダーバードで自分宛のメー...
-
差出人と宛先が同じメールって?
-
ACCESSで自動でメールをおくる...
-
宛先・cc・Bccをグループ化し...
-
Wordの差し込み印刷でのフィル...
-
Becky!で新規メールを作ると宛...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メールの宛先の「リソース」とは
-
CCを日本語で言うと?
-
Outlookで[全員に返信]をクリッ...
-
宛先が、recipients not specif...
-
迷惑メールの遮断法
-
Outlook で宛先が複数の場合の人数
-
Outlook2019の宛先表示について
-
アンダーバーが表示されない
-
宛先の名前の後に「、」がつく
-
宛先の順番が入れ替わってしまう。
-
宛先とCCの違いは何でしょうか。
-
ACCESS2010 レポートを分割しP...
-
宛先・cc・Bccをグループ化し...
-
Wordの差し込み印刷でのフィル...
-
ACCESSで自動でメールをおくる...
-
ACCESS2000のレポートのコント...
-
サンダーバードで自分宛のメー...
-
以前、送信した人に再びメール...
-
BCCで送信、宛先は空欄
-
EXCELマクロで複数のEMAIL宛先...
おすすめ情報