いろいろ検索や質問をしてエクセル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")をコピーし、
「リッチテキスト形式」で貼り付けたいのです。
どのようなコードに変えればよいのか教えていただけると助かります。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>ただ、マクロを2回以上走らせると、その都度いくつもOutlookが立ち上がってしまいます。


>これは解消できますか?
それは前回QAで手当て済みだったんですけどね。

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) = "こんにちは!" & vbCrLf & _
       "テストメールです。" & vbCrLf & _
       "よろしくおねがいします。" & vbCrLf
strMOJI(1) = "以上です。" & vbCrLf & _
       "EMAX株式会社" & vbCrLf & _
       "Emax"
objMAIL.To = "E-Mail_Address_Here"
objMAIL.Subject = "テスト"
objMAIL.BodyFormat = 2 'HTML形式
objMAIL.Body = strMOJI(0) & strMOJI(1)
objMAIL.display

n = Len(strMOJI(0))
ActiveSheet.Range("A1:D10").Copy
oApp.ActiveInspector.WordEditor.Range(n, n).Paste
Application.CutCopyMode = False

Set objMAIL = Nothing
Set oApp = Nothing

BodyFormatはHTML形式じゃないと書式が維持できないような感じです。
#バージョン、もしくは受信側のメーラーによるかもしれませんけど..
    • good
    • 2
この回答へのお礼

何から何までありがとうございます。
わからないことだらけですが、やりたいことができました。
感謝いたします。
これからもご指導賜りますようお願い申し上げます。

お礼日時:2012/08/17 17:58

>なお、エクセルのバージョンは2010、Outlookは2007です。


EnvelopeVisibleプロパティは同一バージョンでないとエラーになるようです。(by Google君)
次案ですが、Sendkeysはトばして..Outlookのオプションの「メール形式」のところで
「電子メールの編集に..Word..を使用する..」的なチェックがあったらチェック入れておいて下記試してみて下さい。
#Outlook2007持ってないのでアヤフヤ

Dim oApp  As Object
Dim objMAIL As Object
Dim strMOJI As String

Set oApp = CreateObject("Outlook.Application")
oApp.GetNamespace("MAPI").GetDefaultFolder(6).display
Set objMAIL = oApp.CreateItem(0)
strMOJI = "こんにちは!" & vbNewLine & _
     "テストメールです。" & vbNewLine & _
     "よろしくおねがいします。" & vbNewLine
objMAIL.To = "E-Mail_Address_Here"
objMAIL.Subject = "テスト"
objMAIL.BodyFormat = 3
objMAIL.Body = strMOJI
objMAIL.display
ActiveSheet.Range("A1:D10").Copy
With oApp.ActiveInspector.WordEditor.Range
  .Collapse 0
  .Paste
End With
Application.CutCopyMode = False
Set objMAIL = Nothing
Set oApp = Nothing
    • good
    • 1
この回答へのお礼

ありがとうございます。
すごいです!

> 「電子メールの編集に..Word..を使用する..」的なチェックがあったらチェック入れておいて

見当たらないのでなにもしませんでしたがちゃんと出来ました。
ただ、マクロを2回以上走らせると、その都度いくつもOutlookが立ち上がってしまいます。
これは解消できますか?
また、ここまでできると欲が出てしまいました。
下記のように文字列の変数を2つもち、セル範囲を貼り付けた下にも文字列 strMOJI(1) を入れることは可能でしょうか?
勝手なことばかり言って申し訳ありません。

Sub twst02()
Dim oApp As Object
Dim objMAIL As Object
Dim strMOJI(1) As String

Set oApp = CreateObject("Outlook.Application")
oApp.GetNamespace("MAPI").GetDefaultFolder(6).display
Set objMAIL = oApp.CreateItem(0)
strMOJI(0) = "こんにちは!" & vbNewLine & _
"テストメールです。" & vbNewLine & _
"よろしくおねがいします。" & vbNewLine
strMOJI(1) = "以上です" & vbNewLine & _
"EMAX株式会社" & vbNewLine & _
"Emax"
objMAIL.To = "E-Mail_Address_Here"
objMAIL.Subject = "テスト"
objMAIL.BodyFormat = 3
objMAIL.Body = strMOJI(0)
objMAIL.display
ActiveSheet.Range("A1:D10").Copy
With oApp.ActiveInspector.WordEditor.Range
.Collapse 0
.Paste
End With
Application.CutCopyMode = False
Set objMAIL = Nothing
Set oApp = Nothing
End Sub

お礼日時:2012/08/16 18:10

HTML形式ではダメなんでしょうか。


こちらにサンプルが載ってますし
『Excel 2002 または Excel 2003 で Visual Basic for Applications を使用して電子メール メッセージでセル範囲を送信する方法』
http://support.microsoft.com/kb/816644/ja

上記例のままでも[この選択範囲を送信する]で送信。
必要なら新規Bookにコピーするように変更したり。
Sub try()
  Dim r As Range
  Set r = ActiveSheet.Range("A1:D10")
  With Workbooks.Add(xlWBATWorksheet)
    .EnvelopeVisible = True
    With .Sheets(1)
      With .MailEnvelope
        .Introduction = "こんにちは!" & vbNewLine & "テストメールです。" & vbNewLine & "よろしくおねがいします。"
        .Item.To = "E-Mail_Address_Here"
        .Item.Subject = "テスト"
        '.Item.Send
      End With
      r.Copy .Range("A1")
    End With
  End With
End Sub

他には
・不安定だけど妥協してSendkeysを使う。
・(Outlookメール編集にWordを使っている場合)OutlookのActiveInspector.WordEditor.Range.Pasteメソッドを使う。
・セル範囲をhtm形式に吐き出してHTMLBodyに読み込む。(HTML形式メール)
・Win32API関数を使ってクリップボードからHTML Formatを取り出してHTMLBodyに読み込む。(HTML形式メール)
などが考えられない事もないです。
    • good
    • 0
この回答へのお礼

end-uさん、前回もありがとうございました。
今回もさっそくありがとうございます。

試してみましたが、参考URLのものも、end-uさんご提示のものも

.EnvelopeVisible = True

のところで実行時エラー1004「EnvelopeVisibleメソッドは失敗しました。Workbookオブジェクト」となります。
なお、エクセルのバージョンは2010、Outlookは2007です。

> HTML形式ではダメなんでしょうか

貼り付けたあと、編集が可能ならOKです。

お礼日時:2012/08/16 14:36

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcelVBAでOutlookにセル内容を送る

いつもすいません。本日はExcelVBAでOutLookを操作する件です。

Excelのあるセルの内容を、書体やフォントの大きさ、色などをそのままにして
OutLookのメール本文に設定できないでしょうか? 要は、「セルを選択~コピー」
「Outlookのメール本文で貼り付け」という作業をしたいんです。

現状のExcel-VBAのコードは

Set M = AP.createitem(0) 'OutLookの起動
M.bodyformat = 3 'テキストメールを指示
M.To = Work_A '宛先
M.Subject = Work_T '件名
M.body = Work_C '本文
M.display 'メールを表示

こんな感じで、「Work_C」には「Range("A1").Value」でデータを与えているために、
現状テキストデータしか送られてないんです。

どうすれば「M.body」に「Range("A1") 」の書式を含めたデータを与えられますか?
出来れば、HTMLのコードを書かずに何とかしたいんですけど・・・。

いつもすいません。本日はExcelVBAでOutLookを操作する件です。

Excelのあるセルの内容を、書体やフォントの大きさ、色などをそのままにして
OutLookのメール本文に設定できないでしょうか? 要は、「セルを選択~コピー」
「Outlookのメール本文で貼り付け」という作業をしたいんです。

現状のExcel-VBAのコードは

Set M = AP.createitem(0) 'OutLookの起動
M.bodyformat = 3 'テキストメールを指示
M.To = Work_A ...続きを読む

Aベストアンサー

このあたりはやったことがないのですが、Web検索などで見た範囲では、ActiveInspector.WordEditorを使って貼り付けるという方法があるらしいです。

http://oshiete.goo.ne.jp/qa/7645239.html
http://answers.microsoft.com/ja-jp/office/forum/office_2010-excel/excel/cf4473d2-feef-430d-8005-74cd3cf61983

参考URL:http://oshiete.goo.ne.jp/qa/7645239.html

QEXCEL VBAでメール添付して送信

こんにちは。
EXCEL VBAで
自分のファイルをある宛先にメールで送信したい場合は、
どのようにしたらできますか?
どなたか、わかる方・・・教えてください。
よろしくお願いします。

Aベストアンサー

参考のスレのVBAを必要な部分だけにすると以下になります。
準備
VBエディターのツール 参照設定で
Microsoft Outlook 10.0 Object Library にチェックをいれます。
B3セルに 宛先 メールアドレス
F3セルに CC メールアドレス
C3セルに 件名
D3セルに 本文
G3セルに 添付ファイルのパスとファイル名
入れておいた場合です。

Sub ボタン1_Click()
Dim myOLApp As Object
Dim myDATA As MailItem
Set myOLApp = CreateObject("Outlook.Application")
Set myDATA = myOLApp.CreateItem(olMailItem)
myDATA.To = Range("B3").Value
myDATA.CC = Range("F3").Value
myDATA.Subject = Range("C3").Value
myDATA.Body = Range("D3").Value
myDATA.Attachments.Add Range("G3").Value
myDATA.Send
Set myDATA = Nothing
Set myOLApp = Nothing
End Sub

コピペして使ってみてください。コマンドの意味は先紹介のスレに
説明して有ります。

参考のスレのVBAを必要な部分だけにすると以下になります。
準備
VBエディターのツール 参照設定で
Microsoft Outlook 10.0 Object Library にチェックをいれます。
B3セルに 宛先 メールアドレス
F3セルに CC メールアドレス
C3セルに 件名
D3セルに 本文
G3セルに 添付ファイルのパスとファイル名
入れておいた場合です。

Sub ボタン1_Click()
Dim myOLApp As Object
Dim myDATA As MailItem
Set myOLApp = CreateObject("Outlook.Application")
Set myDATA = myOLApp.CreateItem(olM...続きを読む

Qエクセル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

エクセル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)
  strM...続きを読む

Aベストアンサー

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

QVBA エクセル メール送信 ハイパーリンクの貼り方

お世話になります。
首題の通り、エクセルに記述したマクロを使いメールを送りたいのですが、その際に文章の記述にハイパーリンクを張りたいのです。
例えば下記のモジュールですと、文章のBODYの部分には「OKWAVE」とだけ表示されますが、これをクリックすると[http://okwave.jp/]が開くようにしたいのですが、どのように記述すればよろしいのでしょうか?よろしくご指南くださいませ。

Sub test()
Dim strBody As String

Filename = "ハイパーリンクの貼り方???"
strBody = "OKWAVE"

Set myOL = CreateObject("Outlook.Application")
Set myMAIL = myOL.CreateItem(0)
With myMAIL
.to = "123@123.GOM"
.Subject = Filename
.body = strBody
.display
'.send
End With
Set myMAIL = Nothing
Set myOL = Nothing
End Sub

お世話になります。
首題の通り、エクセルに記述したマクロを使いメールを送りたいのですが、その際に文章の記述にハイパーリンクを張りたいのです。
例えば下記のモジュールですと、文章のBODYの部分には「OKWAVE」とだけ表示されますが、これをクリックすると[http://okwave.jp/]が開くようにしたいのですが、どのように記述すればよろしいのでしょうか?よろしくご指南くださいませ。

Sub test()
Dim strBody As String

Filename = "ハイパーリンクの貼り方???"
strBody = "OKWAV...続きを読む

Aベストアンサー

こんにちは。

返事が遅くなりしまた。

(1)
a) Msg = "<A HREF=;http://google.co.jp/><b>goole検索</b></A>"

b) Msg = "<A HREF=""http://google.co.jp/""><b>goole検索</b></A>"
は何が違うんでしょうか?

VBAで書く場合は、b)側が正しいです。理由は、VBAでは、素のコードの場合は、String型の変数の中に代入されるので、コードの中では、一個の「"」はエラーが出ると思います。うまく書けているか、Debug.Print でチェックしてみると良いです。リンク先では、b)で書かれていると思います。

(2)は、私は、CSS 自体はインラインで埋め込めば可能だと思います。しかし、フォームまでは書いたことがありませんが、可能・不可能なら、こちらも可能だと思います。ただし、相手側のメールで、セキュリティが働いたら、意味がありません。メールのマナーとしては、あまり良くないようですから、どこかのウェブサイトに飛ばせて、そこが使うようにしたらいかがですか?

HTMLメールの制作時に気をつけたい9つのポイント
http://coliss.com/articles/build-websites/operation/work/879.html

こんにちは。

返事が遅くなりしまた。

(1)
a) Msg = "<A HREF=;http://google.co.jp/><b>goole検索</b></A>"

b) Msg = "<A HREF=""http://google.co.jp/""><b>goole検索</b></A>"
は何が違うんでしょうか?

VBAで書く場合は、b)側が正しいです。理由は、VBAでは、素のコードの場合は、String型の変数の中に代入されるので、コードの中では、一個の「"」はエラーが出ると思います。うまく書けているか、Debug.Print でチェックしてみると良いです。リンク先では、b)で書かれていると思います。

...続きを読む

QEXCELマクロで複数のEMAIL宛先を指定

WIN XP, EXCEL2002, メーラーはOUTLOOK2002を使っています。
EXCELマクロで複数のEMAIL宛先を指定することはできますか?

ActiveWorkbook.SendMail Recipients:="email@*****.co.jp", Subject:="test"
にてひとつの宛先の場合はちゃんと送信できましたが、複数の宛先を指定する方法が分かりません。
よろしくお願いいたします。

Aベストアンサー

以下のようにすると、1本のメールを複数人に送れます。

Dim Str(4) As String
Str(0) = "email0@*****.co.jp"
Str(1) = "email1@*****.co.jp"
Str(2) = "email2@*****.co.jp"
Str(3) = "email3@*****.co.jp"
ActiveWorkbook.SendMail Recipients:=Str, Subject:="test"

または

ActiveWorkbook.SendMail Recipients:="email0@*****.co.jp,email1@*****.co.jp,email2@*****.co.jp,email3@*****.co.jp", Subject:="test"

最初のは#2の方の回答と似ていますが、#2の方の回答は1本のメールを4人に送るのではなく、4本のメールを単独で1人ずつに送っています。

この回答では、1本のメールを4人に送っています。

「送った相手に、誰々に送っているのか、知らせたい」場合は1本のメールで済ませます。

「送った相手に、誰々に送っているのか、知らせたくない」場合は、個別に4本で送ります。

1本で済ますか個別に送るかは、場合に合わせて使い分けた方が良いでしょう。

以下のようにすると、1本のメールを複数人に送れます。

Dim Str(4) As String
Str(0) = "email0@*****.co.jp"
Str(1) = "email1@*****.co.jp"
Str(2) = "email2@*****.co.jp"
Str(3) = "email3@*****.co.jp"
ActiveWorkbook.SendMail Recipients:=Str, Subject:="test"

または

ActiveWorkbook.SendMail Recipients:="email0@*****.co.jp,email1@*****.co.jp,email2@*****.co.jp,email3@*****.co.jp", Subject:="test"

最初のは#2の方の回答と似ていますが、#2の方の回答は1本のメール...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QEXCEL VBA メール送信でファイル添付

現在、使用しているVBAを利用したメンバー向け案内メール配信で、ファイルを添付できないかと考えております。
G列に入力したアドレスのファイルを添付して送信できればと思うのですが、ご教授願えませんでしょうか。

現在のVBAは企業名、宛先共に変えられるように下記のような形となっております。
添付ファイルも宛先毎に異なります。

B列:送信先メールアドレス
C列:メール件名
D列:送信先所属名
E列:送信先宛名
F列:メール本文

コマンドボタンで一括配信となっております。

【以下記述】
Sub Mail_Send()

Dim iMsg As Object
Dim iConf As Object
Dim strbody As String
Dim Flds As Variant
Dim i, LastRow As Integer

' CDOオブジェクト初期設定
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")

iConf.Load -1 ' CDO Source Defaults
Set Flds = iConf.Fields
With Flds
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = Worksheets("Sheet1").Range("C2").Value
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = Worksheets("Sheet1").Range("C3").Value
.Update
End With

' 送信範囲設定
LastRow = Worksheets("Sheet1").Range("B7").End(xlDown).Row

' メール送信ループ
For i = 8 To LastRow

' 送信状況メッセージクリア
Worksheets("Sheet1").Range("F2").Value = ""

' メール本文作成
strbody = Worksheets("Sheet1").Range("D" & i).Value & vbCrLf & " " & _
Worksheets("Sheet1").Range("E" & i).Value & " 様" & vbCrLf & vbCrLf & _
Worksheets("Sheet1").Range("F" & i).Value

' 改行変換(送信環境によってはここの修正が必要かも)
tmpstrbody = Replace(strbody, vbLf, vbCrLf)
strbody = Replace(tmpstrbody, vbCr & vbCrLf, vbCrLf)

' メール送信
With iMsg
Set .Configuration = iConf
.From = Worksheets("Sheet1").Range("C4").Value
.To = Worksheets("Sheet1").Range("B" & i).Value
.BCC = Worksheets("Sheet1").Range("C5").Value
.Subject = Worksheets("Sheet1").Range("C" & i).Value
.TextBody = strbody
.Send
End With

' 送信状況メッセージ更新
Worksheets("Sheet1").Range("F2").Value = Worksheets("Sheet1").Range("B" & i).Value & " まで送信成功!"

' 3秒停止
Application.Wait [ NOW() + "0:00:03" ]

Next i

End Sub

現在、使用しているVBAを利用したメンバー向け案内メール配信で、ファイルを添付できないかと考えております。
G列に入力したアドレスのファイルを添付して送信できればと思うのですが、ご教授願えませんでしょうか。

現在のVBAは企業名、宛先共に変えられるように下記のような形となっております。
添付ファイルも宛先毎に異なります。

B列:送信先メールアドレス
C列:メール件名
D列:送信先所属名
E列:送信先宛名
F列:メール本文

コマンドボタンで一括配信となっております。

【以下記述...続きを読む

Aベストアンサー

確認していませんが、こんな感じで出来たと思います。
・・・
.From = Worksheets("Sheet1").Range("C4").Value
.To = Worksheets("Sheet1").Range("B" & i).Value
.BCC = Worksheets("Sheet1").Range("C5").Value
.Subject = Worksheets("Sheet1").Range("C" & i).Value
.Attachments.Add Worksheets("Sheet1").Range("G" & i).Value'←ここ
.TextBody = strbody
・・・

Qエクセル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

エクセル2010です。
エクセルからVBAでアウトルックメールを作成するのですが、差出人を自分ではなく部門名のアドレスにしたいのです。
手動ではなんなく差出人を変更できるのですが、VBAでの方法がわかりません。
ネット検索してみると、
SendUsingAccount = Session.Accounts("アカウント名")
でできるようなのですが、アカウント名がよくわかりません。
アカウント名に、手動で差出人を変更する際に「名前の選択」で指定する部門の名前や部門のアドレスなどを入れてみましたがオブジェクトが必要とのエラーにな...続きを読む

Aベストアンサー

Outlookは2010ですよね。

まず始めにおことわりいたしますが、当方の環境がOffice2007でり、また質問者様の状況をきちんと把握できていないと思われ、さらに何より当方のOutlookの知識はかなり貧弱です。そのため、解決する可能性がある方法を書かせてはいただきますが、不適切な回答かもしれません。


最初に考えられるのは、MailItemのSenderプロパティに差出人の情報を設定することで達成できると思います。
で、何を設定するかですが、下記のリンクを見るとAddressEntryオブジェクトであるとのこと。
http://msdn.microsoft.com/ja-jp/library/office/microsoft.office.interop.outlook._mailitem.sender%28v=office.14%29.aspx
じゃあAddressEntryはどこにあるかというと、Session→AddresLists→AddressList→AddressEntries→AddressEntryのようです。
http://msdn.microsoft.com/en-us/library/office/aa210890%28v=office.11%29.aspx
http://msdn.microsoft.com/en-us/library/office/aa210895%28v=office.11%29.aspx
Sessionオブジェクトにアクセスできる場所はいくつかありますが、とりあえず上記リンク先の例に従いOutlook.Application.Sessionを使ってみます。
(MailItemオブジェクトの直下にもSessionがあるので、もしかしたらこちらの方がいいかもしれません)
ということで前置きが長くなりましたが、たとえば差出人にしたいアドレスがOutlookの連絡先の「ABC Gyomubu」にあるとして、以下のようにしてみてはいかがでしょうか。

objMAIL.Sender = oApp.Session.AddressLists("連絡先").AddressEntries("ABC Gyomubu")

ただし、SenderプロパティはOutlook2010で新設されたものとのことです。
http://msdn.microsoft.com/ja-jp/library/office/ee692174%28v=office.14%29.aspx
そのため、当方の環境では検証できません。


もう1つ可能性のある方法としては、MailItemオブジェクトのSentOnBehalfOfNameプロパティに文字列で差出人を設定する、というのがあるようです。

objMAIL.SentOnBehalfOfName = "ABC Gyomubu"

としてみてはいかがでしょう。(表示名よりメールアドレスそのものの方が確実かもしれません)
当方の環境では、Outlook2007で差出人欄に入るところまでは確認できたのですが、システムの都合でこの状態では送信できないため検証できていません。


以前、似たような質問に回答したのですが、どうやらその時は的外れな回答をしてしまったようです。
http://oshiete.goo.ne.jp/qa/8095478.html
というのは、質問内容はSenderプロパティに関するものだったのですが、SendUsingAccountについて答えてしまったからです。
もしもメール送受信のためのアカウントを複数設定していてそれを選択するということなら、そこに回答したようにSendUsingAccountを使えばいいと思います。
でもおそらくそういう問題ではないですよね。もしもこれをご覧になっていたなら、的外れな情報で申し訳ありません。


うまくいかない場合や不明な点がある場合など、何かありましたら補足いただければ再検討いたします。

Outlookは2010ですよね。

まず始めにおことわりいたしますが、当方の環境がOffice2007でり、また質問者様の状況をきちんと把握できていないと思われ、さらに何より当方のOutlookの知識はかなり貧弱です。そのため、解決する可能性がある方法を書かせてはいただきますが、不適切な回答かもしれません。


最初に考えられるのは、MailItemのSenderプロパティに差出人の情報を設定することで達成できると思います。
で、何を設定するかですが、下記のリンクを見るとAddressEntryオブジェクトであるとのこと。
http:/...続きを読む

Qアウトルックが起動しているかどうかを取得するには?

http://www.ken3.org/cgi-bin/group/vba_outlook.asp
を参考に
Sub Sample()
Dim oApp As Outlook.Application
Dim myNameSpace As Outlook.Namespace
Dim myFolder As Outlook.Folder

'outlook 起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を
Set oApp = CreateObject("Outlook.Application")
Set myNameSpace = oApp.GetNamespace("MAPI")

'作業フォルダーの指定(.GetDefaultFolder) と 表示(.Display)
Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー olFolderInbox=6 指定
myFolder.display
End Sub
でエクセルからアウトルックを起動しているのですが
既に起動していると2個起動してしまいます。

「既に起動しているのなら起動しない」という事はできますか?

参考URLに
起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を
と書いてありますが、ちょっと勘弁できませんでした笑

http://www.ken3.org/cgi-bin/group/vba_outlook.asp
を参考に
Sub Sample()
Dim oApp As Outlook.Application
Dim myNameSpace As Outlook.Namespace
Dim myFolder As Outlook.Folder

'outlook 起動をCreateObjectで ※これだと複数起動してしまうがご勘弁を
Set oApp = CreateObject("Outlook.Application")
Set myNameSpace = oApp.GetNamespace("MAPI")

'作業フォルダーの指定(.GetDefaultFolder) と 表示(.Display)
Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー olFolderInbox=6 指定...続きを読む

Aベストアンサー

No.2です。
少し変更しました。
質問者様のご希望は、Outlookのフォルダのウィンドウがあれば新たに開かない、というものと思いますのでそのようにしました。
(No.2のコードでは受信トレイ以外のフォルダが開いていると、新たに受信トレイのウィンドウが開いてしまいます。)

Sub Sample2()
Dim oApp As Outlook.Application
Dim myNameSpace As Outlook.Namespace
Dim myFolder As Outlook.Folder

'outlook 起動をCreateObjectで ※フォルダのウィンドウがあるなら一応開かないようになった
Set oApp = CreateObject("Outlook.Application")
'参照設定済みのようなので Set oApp = New Outlook.Application でもいいかも

Set myNameSpace = oApp.GetNamespace("MAPI")

'outlookのフォルダのウィンドウがすでに存在するならそのうちの1つをmyFolderにSetし、
'なければ規定のフォルダを得る。
If oApp.Explorers.Count > 0 then
Set myFolder = oApp.Explorers.Item(1).CurrentFolder.FolderPath
Else
Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダー olFolderInbox=6 指定
End If

myFolder.display
End Sub

なお、No.1様解説のGetObjectでうまくいくならばその方が私の回答よりも良いと思います。

No.2です。
少し変更しました。
質問者様のご希望は、Outlookのフォルダのウィンドウがあれば新たに開かない、というものと思いますのでそのようにしました。
(No.2のコードでは受信トレイ以外のフォルダが開いていると、新たに受信トレイのウィンドウが開いてしまいます。)

Sub Sample2()
Dim oApp As Outlook.Application
Dim myNameSpace As Outlook.Namespace
Dim myFolder As Outlook.Folder

'outlook 起動をCreateObjectで ※フォルダのウィンドウがあるなら一応開かないようになった
Set oApp = CreateO...続きを読む

QOutlookのメールを送信するマクロ

お世話になっております。

Microsoft Outlook2003使用で
メール送信のマクロを見様見真似で作ってみたのですが、本文部分がうまくいきません(Best regardsしか表示されません)。
どうすれば正しく反映されるでしょうか?

シートのB1にToアドレスを記入していてTo_addressと名前付
以下、Cc_addressとSubjectも同様にしています。
本文の文章は何行かあり、途中で空白行も入れたいのですが、そこまでまだ手がつけられていません。
本文の文章が3行あるとすると、このマクロではComment1、Comment2、Comment3と名前付しています。

Sub SendEmail()

Dim OlApp As Outlook.Application
Dim mItem As Outlook.MailItem

Dim cell As Range
Dim Subj As String
Dim EmailAddr As String
Dim Recipient As String
Dim Msg As String
Dim Message As String
Dim Sender As String
Dim Comments As String
Dim Comments2 As String
Dim report As String

Worksheets("Sheet1").Activate

'Create Outlook object
 Set OutlookApp = New Outlook.Application
'Get the data
Subj = Range("Subject")
EmailAddr = Range("To_address")
CCAddr = Range("Cc_address")
Body = Range("Comment1") & ("Comment2") & ("Comment3")

'Compose message
Msg = Msg & Comment1 & vbCrLf & vbCrLf
Msg = Msg & Comment2 & vbCrLf & vbCrLf
Msg = Msg & "Best regards," & vbCrLf & vbCrLf
'Create Mail Item
Set mItem = OutlookApp.CreateItem(olMailItem)
With mItem
.To = EmailAddr
.CC = CCAddr
.BCC = BCCAddr
.Subject = Subj
.Body = Msg
.Display

End With
End Sub

宜しくお願い致します。

お世話になっております。

Microsoft Outlook2003使用で
メール送信のマクロを見様見真似で作ってみたのですが、本文部分がうまくいきません(Best regardsしか表示されません)。
どうすれば正しく反映されるでしょうか?

シートのB1にToアドレスを記入していてTo_addressと名前付
以下、Cc_addressとSubjectも同様にしています。
本文の文章は何行かあり、途中で空白行も入れたいのですが、そこまでまだ手がつけられていません。
本文の文章が3行あるとすると、このマクロではComment1、Comment2、...続きを読む

Aベストアンサー

こんにちは。

>Msg = Msg & Comment2 = "<BR>" & "<A HREF=""http://検索</b></A> "
落ち着いて!        
       「= 」が入ると、False になります。

'Compose message
Msg = "<font face=""Arial""><font size=2>"
Msg = Msg & Comment1 & "<BR><BR><BR>"
Msg = Msg & Comment2 & "<A HREF=""http://google.co.jp/""><b>goole検索</b></A> "
Msg = Msg & Comment3 & "<BR><BR><BR>"
Msg = Msg & Comment4 & "<BR><BR><BR><BR>"
Msg = Msg & "Best regards," & "<BR><BR>"
Msg = Msg & "</font></font>"



 "<A HREF=""http://google.co.jp/""><b>goole検索</b></A> "
            ↑            ↑
       リンク先アドレス     リンク名 (表示はずれるかもしれません)

こんにちは。

>Msg = Msg & Comment2 = "<BR>" & "<A HREF=""http://検索</b></A> "
落ち着いて!        
       「= 」が入ると、False になります。

'Compose message
Msg = "<font face=""Arial""><font size=2>"
Msg = Msg & Comment1 & "<BR><BR><BR>"
Msg = Msg & Comment2 & "<A HREF=""http://google.co.jp/""><b>goole検索</b></A> "
Msg = Msg & Comment3 & "<BR><BR><BR>"
Msg = Msg & Comment4 & "<BR><BR><BR><BR>"
Msg = Msg & "Best regards," & "<BR><BR>"
Msg = ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報