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も見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
VBAにてメッセージボックスを最前面に表示させる
その他(プログラミング・Web制作)
-
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
アウトルックが起動しているかどうかを取得するには?
Visual Basic(VBA)
-
-
4
VBAでOutlookを終了させたい ExcelVBAで既に起動されているOutlookを終了させる
Visual Basic(VBA)
-
5
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
Excel2000/VBA:値と書式のみ貼り付けたい。
Excel(エクセル)
-
8
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
9
指定のWORKBOOKを前面表示する方法(エクセル:VBA)
Excel(エクセル)
-
10
特定セルの内容を更新したら、その更新日を自動的に表示する方法について
Excel(エクセル)
-
11
VBAで任意のウインドウのサイズを変更する方法
Visual Basic(VBA)
-
12
Application.ActiveInspectorでエラーがでます。
Visual Basic(VBA)
-
13
OUTLOOK ハイパーリンク返信時に半角が全角になってしまう
Outlook(アウトルック)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メールの宛先の「リソース」とは
-
宛先が、recipients not specif...
-
Outlook で宛先が複数の場合の人数
-
宛先とCCの違いは何でしょうか。
-
宛先を変更してメールを多数の...
-
CCを日本語で言うと?
-
Outlookで[全員に返信]をクリッ...
-
迷惑メールの遮断法
-
ARPパケットの宛先(IP/MAC)ア...
-
Excel:ハイパーリンクに字数制...
-
iphoneでのグループでの一斉送...
-
エクセルからメールアドレスを...
-
新規作成メールを送ることので...
-
メール送信エラー「5231」
-
宛先の名前の後に「、」がつく
-
アンダーバーが表示されない
-
eメールの宛先の下にあるCC...
-
Outlook Express メール メッセ...
-
メーリングリスト
-
宛先・cc・Bccをグループ化し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メールの宛先の「リソース」とは
-
宛先が、recipients not specif...
-
Outlookで[全員に返信]をクリッ...
-
昨日の夕方くらいに頼んだ覚え...
-
Wordの差し込み印刷でのフィル...
-
アンダーバーが表示されない
-
Outlook で宛先が複数の場合の人数
-
CCを日本語で言うと?
-
宛先とCCの違いは何でしょうか。
-
ACCESS2000のレポートのコント...
-
Outlook2019の宛先表示について
-
宛先の順番が入れ替わってしまう。
-
宛先・cc・Bccをグループ化し...
-
宛先の名前の後に「、」がつく
-
ACCESS2010 レポートを分割しP...
-
迷惑メールの遮断法
-
Outlookで自分(Outlookのメルア...
-
Excel:ハイパーリンクに字数制...
-
BCCで送信、宛先は空欄
-
サンダーバードで自分宛のメー...
おすすめ情報