エクセルVBAでOutlookメールの書式を変える

このQ&Aのポイント
  • エクセル2010でOutlookメールの書式を変える方法を教えてください。
  • 特定のテキストを赤字で太文字にする方法を教えてください。
  • 上記のVBAコードを使用してOutlookメールを作成し、特定のテキストを赤字で太文字にしたいです。具体的な方法を教えてください。
回答を見る
  • ベストアンサー

エクセルVBAでOutlookメールの書式を変える

エクセル2010です。 下記のようなコードでOutlookメールを作成したとき、たとえば  "ABC株式会社" だけを赤字で太文字にするにはどう書けばよいのでしょうか? Sub TEST001()   Dim oApp As Object   Dim objMAIL As Object   Dim strMOJI(1) As String   On Error Resume Next   Set oApp = GetObject(, "Outlook.Application")   On Error GoTo 0   If oApp Is Nothing Then     Set oApp = CreateObject("Outlook.Application")   End If   Set objMAIL = oApp.CreateItem(0)   strMOJI(0) = "こんにちは!" & vbCrLf & _   "色付けテストです。" & vbCrLf & _   "よろしくおねがいします。" & vbCrLf   strMOJI(1) = vbCrLf & _   "以上です。" & vbCrLf & _   "ABC株式会社" & vbCrLf & _   "emaxemax"   objMAIL.To = "xxxx@xxx.co.jp"   objMAIL.CC = "yyyy@xxx.co.jp"   objMAIL.Subject = "テスト"   objMAIL.Body = strMOJI(0) & strMOJI(1)   objMAIL.Display End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

あ!すいません、太字、見落としてました。 はい、#2お礼欄のように<b></b>として貰えれば #1の回答主旨に沿っています。 失礼しました。

emaxemax
質問者

お礼

さっそくありがとうございました。 HtmlはむかしWebサイトをつくってみようかなぁとおもってかじりましたが挫折しました。 でもOKとのことで安心しました。 今回もほんとに助けてもらいました。これで明日安心して会社に行けます。 ありがとうございます。

その他の回答 (2)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

#1、cjです。 すみません、また、凡ミスしちゃいました。 意図していたのは、 ・ ・ ・ ・   objMAIL.Subject = "テスト"   objMAIL.Body = strMOJI(0) & strMOJI(1)   objMAIL.Display   objMAIL.HTMLBody = Replace$(objMAIL.HTMLBody, "ABC株式会社", "<font color=red>ABC株式会社</font color>") End Sub でした。 一応、非同期処理ですから、この順番でもうまく行かない時は、 DoEventsとかSleep関数とか適当に待機を加えてみてください。 失礼しました。

emaxemax
質問者

お礼

cj_mover さん、いつもありがとうございます。 また助けていただきました。 objMAIL.HTMLBody = Replace$(objMAIL.HTMLBody, "ABC株式会社", "<font color=red><b>ABC株式会社</b></font color>") HTMLのことはほとんどわからないのですが、これで赤字で太文字にすることができました! (太文字、これでいいんですよね?)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 私にとっては未知の世界でしたが、回答が付かないようなので、 色々試してみました。 取り合えず、無難そうな方法として、 ・ ・ ・   objMAIL.Subject = "テスト"   objMAIL.HTMLBody = Replace$(objMAIL.HTMLBody, "ABC株式会社", "<font color=red>ABC株式会社</font color>")   objMAIL.Display End Sub ' ' /// みたいな方法でも良さそうに思います。 一応、   objMAIL.GetInspector.WordEditor.Characters(i).Font.Color = vbRed みたいな(或いは.Styleを用いたりする)方法もあるようですが、 何文字目を指定するべきか探るのが難しくて、すぐには判りませんでした。 /// 余談になりますが、 ちょっと手の内を紹介しておこうと思います。 因みに、OL VBAはまったく扱ったことがありませんが、 こういう時には、尊敬する先輩達の言葉を思い出して、 3種の神器(ローカルウィンドウとオブジェクトブラウザとVBAヘルプ) を駆使して調べるようにしています。(今回はOL VBAの方で調べました) それでも解らなければWeb検索、それでも解らなければ質問、というのが 私の場合のルーティンですが、大体は1段階目めで答えが見つかりますし、 一番力が付く取り組み方かな、と思っています。 "VBEの使いこなし"にも、時々目を向けてみてくださいませ。 VBEで調べて試したことを書いただけなので、確証がある訳ではありませんが、、、。 以上です。それでは、また。

emaxemax
質問者

お礼

いつもありがとうございます。 3種の神器ですか。 調べ方がいまいちよくわからないのです。。。・

関連するQ&A

  • エクセルVBAでメールに画像添付

    エクセル2010です。 以下のようなVBAでOutlookメールを作成しているのですが、本文の中に画像を添付する方法がわかりません。 下記で言えば strMOJI(0) と strMOJI(1) の間に画像を張り付けたいのです。 画像ファイルを添付するのではなく画像として見えるようにしたいのです。 どのように書けばよろしいでしょうか? Sub TEST001()   Dim oApp As Object   Dim objMAIL As Object   Dim strMOJI(1) As String   On Error Resume Next   Set oApp = GetObject(, "Outlook.Application")   On Error GoTo 0   If oApp Is Nothing Then     Set oApp = CreateObject("Outlook.Application")   End If   Set objMAIL = oApp.CreateItem(0)   strMOJI(0) = "こんにちは!" & vbCrLf & _   "テストです。。" & vbCrLf & _   "よろしくおねがいします。" & vbCrLf   strMOJI(1) = vbCrLf & _   "以上です。" & vbCrLf & _   "ABC株式会社" & vbCrLf & _   "emaxemax"   objMAIL.To = ""   objMAIL.CC = "xxxx@xxx.co.jp"   objMAIL.Subject = "テスト"   objMAIL.Body = strMOJI(0) & strMOJI(1)   objMAIL.Display End Sub

  • エクセルVBAでアウトルックメールの差出人変更

    エクセル2010です。 エクセルからVBAでアウトルックメールを作成するのですが、差出人を自分ではなく部門名のアドレスにしたいのです。 手動ではなんなく差出人を変更できるのですが、VBAでの方法がわかりません。 ネット検索してみると、 SendUsingAccount = Session.Accounts("アカウント名") でできるようなのですが、アカウント名がよくわかりません。 アカウント名に、手動で差出人を変更する際に「名前の選択」で指定する部門の名前や部門のアドレスなどを入れてみましたがオブジェクトが必要とのエラーになってしまいます。 どうすればよいのでしょうか? Sub TEST001() Dim oApp As Object Dim objMAIL As Object Dim strMOJI(1) As String On Error Resume Next Set oApp = GetObject(, "Outlook.Application") On Error GoTo 0 If oApp Is Nothing Then Set oApp = CreateObject("Outlook.Application") End If Set objMAIL = oApp.CreateItem(0) strMOJI(0) = "こんにちは!" & vbCrLf & _ "差出人変更のテストです。。" & vbCrLf & _ "よろしくおねがいします。" & vbCrLf strMOJI(1) = vbCrLf & _ "以上です。" & vbCrLf & _ "ABC株式会社" & vbCrLf & _ "emaxemax" objMAIL.To = "" objMAIL.CC = "xxxx@xxx.co.jp" objMAIL.Subject = "テスト" objMAIL.Body = strMOJI(0) & strMOJI(1) ' objMAIL.SendUsingAccount = Session.Accounts("ABC Gyomubu")'ここでエラー objMAIL.Display End Sub

  • マクロのメール作成について教えてください

    メール作成に関するマクロで教えて下さい。 下記のマクロで、件名と文章内の#○○○の○○○の部分には 毎回違う3ケタの数字が入ります。 これを例えば、エクセルのセルA1に101と入力されていたら 件名と文章内の○○○の部分を101にした状態でメールを起動させたいです。 また最後の名前○○の部分には、セルA2にデータ入力規則でリストを作成し 選んだ名前を選択すると○○の部分が反映された状態でメールが起動するようにしたいです。 それと文章内の書体をMS P明朝にするにはどうすればよいでしょうか? 教えて下さい。 Sub メールマクロ() Dim oApp As Object Dim objMAIL As Object Dim strMOJI(1) As String Dim n As Long On Error Resume Next Set oApp = GetObject(, "Outlook.Application") On Error GoTo 0 If oApp Is Nothing Then Set oApp = CreateObject("Outlook.Application") oApp.GetNamespace("MAPI").GetDefaultFolder(6).display End If Set objMAIL = oApp.CreateItem(0) strMOJI(0) = "【秘/Confidential】 " & vbCrLf & _ "テスト様" & vbCrLf & _ "CC.関係各位様" & vbCrLf & _ " " & vbCrLf & _ "いつもお世話になっております。" & vbCrLf & _ "#○○○ G1 G2の計測を行いました" & vbCrLf & _ "以上です。" & vbCrLf & _ "EMAX株式会社" & vbCrLf & _ "名前○○" objMAIL.To = "E-Mail_Address_Here" objMAIL.Subject = "#○○○ G1 G2 計測結果" objMAIL.BodyFormat = 3 'リッチテキスト objMAIL.Body = strMOJI(0) objMAIL.display Set objMAIL = Nothing Set oApp = Nothing End Sub

  • エクセルVBAでOutlookメール作成

    いろいろ検索や質問をしてエクセルVBAで、下記のコードによりOutlookのメールを自動作成できるようになりました。 Sub TEST01() Set oApp = CreateObject("Outlook.Application") Set objMAIL = oApp.CreateItem(0) 'olMailItem=0 strMOJI = "こんにちは!" & vbNewLine & "テストメールです。" & vbNewLine & "よろしくおねがいします。" objMAIL.To = "XXXX@XXXXX.co.jp" '宛先 objMAIL.Subject = "テスト" '件名 objMAIL.Body = strMOJI '本文の代入 objMAIL.display '表示 End Sub それで、実際にはstrMOJI に代入した文字列の下に、このマクロを記述してあるBOOKのSheets("Sheet1").Range("A1:D10")をコピーし、 「リッチテキスト形式」で貼り付けたいのです。 どのようなコードに変えればよいのか教えていただけると助かります。 よろしくお願いいたします。

  • 昨日まで使えたVBAにエラー 至急質問です

    VBAについて質問です。 昨日まで使えていたVBAにエラーが出るようになってしまい困っています。 どなたか詳しい方に手直ししていただければと思います。 VBAの内容は、シートの断片的な一部を選択して、OUTLOOKにコピペするという内容です。 メールの件名に特定のセル、本文に特定のレンジが反映されるようになっています。 エラーの内容は、「オブジェクト変数または With ブロック変数が設定されていません。」です。 よろしくお願いいたします。 ===== Sub copy_ICECP_P_1C() Worksheets("★(PAPER)Sheet").Activate Worksheets("★(PAPER)Sheet").Range("A45:A80,A83:A98,A100:A106") _ .Copy Destination:=Worksheets("COPY SHEET").Range("A1") Worksheets("COPY SHEET").Activate Dim oApp As Object Dim objMAIL As Object Dim strMOJI(1) As String Dim n As Long On Error Resume Next Set oApp = GetObject(, "Outlook.Application") On Error GoTo 0 If oApp Is Nothing Then Set oApp = CreateObject("Outlook.Application") oApp.GetNamespace("MAPI").GetDefaultFolder(6).display End If Set objMAIL = oApp.CreateItem(0) strMOJI(1) = " " & vbCrLf objMAIL.subject = Worksheets("COPY SHEET").Range("A59") objMAIL.BodyFormat = 3 'リッチテキスト形式(もともとは 2 で、(HTML形式)だったところを訂正 objMAIL.body = strMOJI(1) objMAIL.display n = Len(strMOJI(1)) ActiveSheet.Range("A1:A59").Copy oApp.ActiveInspector.WordEditor.Range(A1, A59).Paste Application.CutCopyMode = False Set objMAIL = Nothing Set oApp = Nothing Worksheets("★(PAPER)Sheet").Activate End Sub =====

  • VBAのIF構文について

    VBAでまたわからないところが出てきたので質問させてください。 ActiveWorkbookのworksheet1のa1セルに何か文字列が入っていると仮定して、下記のstrSUB に入る文字列をifで分岐させたいのですが、どのような構文が適していますでしょうか? 下記の内容では、エラーになってしまいます。 識者の方々、よろしくお願いいたします。 ----------------------------------------------------------------- Sub test送信メール作成() Dim oApp As Object Dim objMAIL As Object Dim strSUB As String Dim strBODY As String Set oApp = CreateObject("Outlook.Application") Set objMAIL = oApp.CreateItem(0) strSUB = if ActiveWorkbook.Worksheets(1).range("a1") = "abc" then "aaa" Else "bbb" End If strBODY = "a" & vbCrLf _ & "b" & vbCrLf _ & "c" With objMAIL .To = "aaa@bbb.com" .CC = "ccc@ddd.com" .Subject = strSUB .Body = strBODY .Display End With End Sub

  • VBAです。OUTLOOKでウンドウを選択

    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 '新規メッセージ画面表示 わかりにくいかもしれませんがよろしくお願いします。

  • 本文が最後に表示されてしまいます。

    以下内容で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

  • <EXCEL/VBA> OUTLOOKのウインドを閉じる方法

    EXCEL/VBAで、OUTLOOKのウインドを閉じる方法を教えて下さい。 OUTLOOKを立ち上げた状態で、EXCEL/VBAで下記のようにOUTLOOKのフォルダーを指定してウインドを表示していますが、 VBAで開いたウインドのみ閉じたいのですが、うまく行きません。 oApp.Quitだと元々立ち上げていたoutlookも含めて終了してしまいます。宜しく、お願いします。 Sub OL_TEST() Dim oApp As Object 'OutlookのApplication オブジェクト Dim myNameSpace As Object '名前スペース Dim myFolder As Object 'フォルダー指定 Set oApp = CreateObject("Outlook.Application") Set myNameSpace = oApp.GetNamespace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー olFolderInbox=6 指定 myFolder.Display '表示

  • outlookが起動してるかどうかを取得したい

    Sub Outlookが起動してないなら起動する() Dim oApp 'As Outlook.Application OutlookのApplication オブジェクトを入れる Dim myNameSpace 'As Outlook.NameSpac Dim myFolder 'As Outlook.Folder If Outlookが起動してるなら Then Exit Sub 'outlook 起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を Set oApp = CreateObject("Outlook.Application") Set myNameSpace = oApp.GetNamespace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー myFolder.Display '(通常サイズ olNormalWindow=2 , olMaximized=0,olMinimized=1) oApp.ActiveWindow.WindowState = 0 End Sub ///////////////////////////////////////////////////////////////// のような事がしたいのですが、 If Outlookが起動してるなら Then Exit Sub をどうすればいいのか教えていただけませんか? 当方OFFICE2007を使用しています。

専門家に質問してみよう