以下内容でVBAを組んで、メールにコピペさせたんですが
本文が下に行き、コピーしたグラフが先に表示されます。
どうにか、
"お疲れ様です。" & vbCrLf _
& "このメールと同時にプリンターに同様の用紙が印刷されます。" & vbCrLf _
& "印刷された用紙で、前確FAXを送信してください。" &vbCrLf _
& "尚、以下内容で、前確FAX送信いたします。"
の部分を本文のトップに持って来れないでしょうか?
VBAは下記のように書いております。
Sub Outlookforexcel() '※1
Dim oApp As Object
Dim myNameSpace As Object
Dim myFolder As Object
Dim objMAIL As Object 'メールのオブジェクト
Dim strMOJI As String '本文
'outlook 起動
Set oApp = CreateObject("Outlook.Application")
Set myNameSpace = oApp.GetNamespace("MAPI")
Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダーを指定
'メールアイテムの作成
Set objMAIL = oApp.CreateItem(0) 'olMailItem=0 直値はいけないと思いつつ、
objMAIL.BodyFormat = 3 'olFormatRichText=3 で リッチテキスト形式へ
'宛先・件名・本文 などのデータを代入する
objMAIL.To = Range("O1") '宛先 .TO セルO3から代入
objMAIL.Cc = Range("O2")
objMAIL.Subject = "【確認FAX】印刷終了以下内容で送信します。" '.Subjectで件名
strMOJI = "お疲れ様です。" & vbCrLf _
& "このメールと同時にプリンターに同様の用紙が印刷されます。" & vbCrLf _
& "印刷された用紙で、確認FAXを送信してください。" & vbCrLf _
& "尚、以下内容で、確認FAX送信いたします。"
DoEvents
objMAIL.Body = strMOJI '本文の初期化
DoEvents
objMAIL.Display '画面表示(Mail入力、編集画面を表示)
DoEvents
'Outlook貼り付けのコマンドをコマンドバーから探す
Dim oCBs As Object
Dim oCtl As Object
'今起動中のobjMAIL(メール作成中)のコマンドバーを取り出すよ
Set oCBs = objMAIL.GetInspector.CommandBars
'ループで貼り付けの文字を探す、、、
Dim I As Long 'カウンター
For I = 1 To 35000
'コントロール I 番目を取り出す
Set oCtl = oCBs.FindControl(, I)
If Not (oCtl Is Nothing) Then 'オブジェクトが空じゃなければ
'文字列でコマンド名を比較する
Debug.Print ".Caption " & oCtl.Caption
If oCtl.Caption = "貼り付け(&P)" Then
' ↑で見つけたら oCtlはそのままで、ループを抜ける。
Exit For 'これ以上はループしないでいいので。
End If
End If
Next
'コピー(Excelから)と貼り付け(Outlookへ)処理
Range("A1:I80").Select 'Excel
Selection.Copy
DoEvents
oCtl.Execute '↑で見つけたoCtl 貼り付けコマンド(outlook)を実行
DoEvents
objMAIL.send '送信箱へ ※セキュリティの警告メッセージが出るよ
'ここで、普通はオブジェクトの開放など、後始末をする。
Set oCtl = Nothing
Set oCBs = Nothing
End Sub
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんばんは。
少し、手直ししてみました。★の部分が換えた部分です。
'-------------------------------------------
Sub Outlookforexcel() '※1
Dim oApp As Object
Dim myNameSpace As Object
Dim myFolder As Object
Dim objMAIL As Object 'メールのオブジェクト
Dim strMOJI As String '本文
'outlook 起動
Set oApp = CreateObject("Outlook.Application")
Set myNameSpace = oApp.GetNamespace("MAPI")
Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダーを指定
'メールアイテムの作成
Set objMAIL = oApp.CreateItem(0) 'olMailItem=0 直値はいけないと思いつつ、
objMAIL.BodyFormat = 3 'olFormatRichText=3 で リッチテキスト形式へ
'宛先・件名・本文 などのデータを代入する
objMAIL.To = Range("O1") '宛先 .TO セルO3から代入
objMAIL.Cc = Range("O2")
objMAIL.Subject = "【確認FAX】印刷終了以下内容で送信します。" '.Subjectで件名
strMOJI = "お疲れ様です。" & vbCrLf _
& "このメールと同時にプリンターに同様の用紙が印刷されます。" & vbCrLf _
& "印刷された用紙で、確認FAXを送信してください。" & vbCrLf _
& "尚、以下内容で、確認FAX送信いたします。" & vbCrLf '←-★ここに改行を加える
DoEvents
objMAIL.Body = strMOJI '本文の初期化
DoEvents
objMAIL.Display '画面表示(Mail入力、編集画面を表示)
DoEvents
'Outlook貼り付けのコマンドをコマンドバーから探す
Dim oCBs As Object
Dim oCtl As Object
'今起動中のobjMAIL(メール作成中)のコマンドバーを取り出すよ
Set oCBs = objMAIL.GetInspector.CommandBars
Set oCtl = oCBs.FindControl(, 22) '★これだけでよい
'ループで貼り付けの文字を探す、、、
' Dim I As Long 'カウンター
' For I = 1 To 35000
' 'コントロール I 番目を取り出す
' Set oCtl = oCBs.FindControl(, I)
'
' If Not (oCtl Is Nothing) Then 'オブジェクトが空じゃなければ
' '文字列でコマンド名を比較する
' Debug.Print ".Caption " & oCtl.Caption
' If oCtl.Caption = "貼り付け(&P)" Then
' ' ↑で見つけたら oCtlはそのままで、ループを抜ける。
' Exit For 'これ以上はループしないでいいので。
' End If
' End If
' Next
'コピー(Excelから)と貼り付け(Outlookへ)処理
'Range("A1:I80").Select 'Excel
ActiveSheet.ChartObjects(1).Select '★グラフなら、こちらになる
Selection.Copy
DoEvents
CreateObject("Wscript.Shell").SendKeys "^{END}" '★文末へ
oCtl.Execute
DoEvents
objMAIL.send '送信箱へ ※セキュリティの警告メッセージが出るよ
'ここで、普通はオブジェクトの開放など、後始末をする。
Set oCtl = Nothing
Set oCBs = Nothing
Set oApp = Nothing '★解放を加える
End Sub
ありがとうございます。
早速実行した。
最初は、他にも印刷のマクロも組んでるので、うまくいかなかったですが
DoEventsで、解決しました。
どうもありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) エクセル VBA メール本文に指定セルに記載されているURLをリンクとして記載する方法 8 2022/08/08 07:50
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBA初心者です。 2 2022/10/10 11:52
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データリーダーからのデータ読...
-
ユーザーフォーム内のテキスト...
-
teraterm文字列の選択
-
EXCELで右クリックメニューの追加
-
Windowsのバッチファイルでcall...
-
w3getからのアクセスを探知する...
-
テキストボックスのフォーカス...
-
Visual C++からftpを使う
-
VCVARS32は何の略
-
いい方法ありませんか?
-
表示を標準か改ページプレビュ...
-
本文が最後に表示されてしまい...
-
gmailでのimap設定
-
PCに保存していた写真を見られ...
-
拡張子をつくる
-
Excelで外部のファイルの場所を...
-
同名フォルダを作成し、そのフ...
-
MkDir パス名が無効です
-
linux duコマンドで困っています。
-
OpenFileDialogを使った後にも...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Teratermマクロの戻り値の取得失敗
-
テキストボックスのフォーカス...
-
Windowsのバッチファイルでcall...
-
Visual C++からftpを使う
-
ユーザーフォーム内のテキスト...
-
コマンドプロンプトでサービス...
-
バッチ(Windows2000)での解析エ...
-
シリアル通信でのread関数の戻り値
-
データリーダーからのデータ読...
-
OUTLOOKで受信メールを開くとテ...
-
コマンドプロンプトで印刷実行
-
コマンドボタンテキストの改行
-
system関数のエラー検出
-
リストボックス2に表示されたフ...
-
EXCELで右クリックメニューの追加
-
クリックしたボタンによってSel...
-
VB6.0でVISAを用いる
-
FlashROMにデータを書き込むに...
-
VBSで指定した時刻にメッセージ...
-
ネットワーク内のIPアドレス...
おすすめ情報