
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メールの宛先の「リソース」とは
-
CCを日本語で言うと?
-
Outlook で宛先が複数の場合の人数
-
Outlook2019の宛先表示について
-
Wordの差し込み印刷でのフィル...
-
宛先が、recipients not specif...
-
Outlookで自分(Outlookのメルア...
-
サンダーバードで自分宛のメー...
-
Outlookで[全員に返信]をクリッ...
-
ACCESSで自動でメールをおくる...
-
宛先の順番が入れ替わってしまう。
-
VBAです。OUTLOOKでウンドウを選択
-
送信済みアイテムを宛先順の日...
-
アンダーバーが表示されない
-
Outlook Express 受信時間が長...
-
outlookでメールを送ってくれた...
-
OUTLOOK ハイパーリンク返信時...
-
「Thunderbirdメール」の送信文...
-
Outlookの転送は、PC起動してい...
-
Outlookで別のフォルダに仕分け...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メールの宛先の「リソース」とは
-
CCを日本語で言うと?
-
宛先が、recipients not specif...
-
宛先の名前の後に「、」がつく
-
Outlookで[全員に返信]をクリッ...
-
Outlook で宛先が複数の場合の人数
-
Outlook2019の宛先表示について
-
Wordの差し込み印刷でのフィル...
-
宛先の順番が入れ替わってしまう。
-
アンダーバーが表示されない
-
Outlookで自分(Outlookのメルア...
-
宛先とCCの違いは何でしょうか。
-
ACCESS2010 レポートを分割しP...
-
宛先・cc・Bccをグループ化し...
-
BCCで送信、宛先は空欄
-
ACCESS2000のレポートのコント...
-
「メールの全員返信の仕方」に...
-
OUTLOOKの宛先の自動候補の削除
-
BCCは絶対わからないですか?
-
OutlookでヘッダーにBCCのみ表...
おすすめ情報