プロが教えるわが家の防犯対策術!

VBAでoutlook365が起動しません。EXCELまたは、OUTLOOK設定がおかしいのでしょうか。
メール一括作成のボタンを押しても『記載に誤りが無いことを確認しましたか?』『"送信完了しました』のメッセージは出るのですが、outlookが起動しませんし下書ホルダにも保存されません。
EXCELは他のマクロは動作しますし、Outlookはセキュリティ(トラストセンター)設定も有効です。どなたかご教示いただけますようお願いいたします。
EXCEL画面の画像と下記に対象の記述を記します。
-------------------------------------------------------
Sub メール作成()
Dim objOutlook As Outlook.Application
Dim objMail As Outlook.MailItem
Dim wsMail As Worksheet
Dim filead As String
Dim tenp1 As String
Dim tenp2 As String

'メール立ち上げ
Set objOutlook = New Outlook.Application
Set wsMail = ThisWorkbook.Sheets("リスト")

'添付ファイルのアドレスを変数にする
filead = Worksheets("リスト").Range("B3").Value

'共通添付データのアドレスを読む
tenp1 = filead & "\" & Worksheets("リスト").Range("B4")
tenp2 = filead & "\" & Worksheets("リスト").Range("B5")

Dim kobetsumail1 As String
Dim kobetsumail2 As String
Dim adrs1 As String
Dim asrs2 As String

'変数iを設定。最初は1
Dim i As Long
i = 1

'送付前の確認メッセージ
Dim rc As Long
rc = MsgBox("記載に誤りが無いことを確認しましたか?", vbYesNo + vbQuestion, "確認")

If rc = vbNo Then
MsgBox "中断しました"
End
End If

'基準となるセルを選択
Worksheets("リスト").Select
Range("B7").Select

'取引先名が書かれているB列が空欄になるまで続ける
Do Until ActiveCell.Offset(i, 0).Value = ""

'送付チェック欄が○なら作業を続ける
If ActiveCell.Offset(i, 2).Value = "○" Then

Set objMail = objOutlook.CreateItem(olMailTtem)

'個別メールのデータ名称を読む
Dim CC12(1) As String
CC12(0) = ActiveCell.Offset(i, 6).Value
CC12(1) = ActiveCell.Offset(i, 8).Value

'メールを作成する
With wsMail
objMail.to = ActiveCell.Offset(i, 4).Value
objMail.CC = Join(CC12, ";")
objMail.Subject = Range("B1").Value
objMail.Bodyformat = olFormatPlain
objMail.body = Range("B7").Offset(i, 0) & vbCrLf & Range("E7").Offset(i, 0) & "様" & vbCrLf & vbCrLf & Range("B2").Value & vbCrLf & vbCrLf

kobetsumail1 = ActiveCell.Offset(i, 9).Value
asrs1 = filead & "\" & kobetsumail1

kobetsumail2 = ActiveCell.Offset(i, 10).Value
asrs2 = filead & "\" & kobetsumail2

If Range("B4").Value <> "" Then
objMail.Attachments.Add tenp1
End If

If Range("B5").Value <> "" Then
objMail.Attachments.Add tenp2
End If

If ActiveCell.Offset(i, 9).Value <> "" Then
objMail.Attachments.Add asrs1
End If

If ActiveCell.Offset(i, 10).Value <> "" Then
objMail.Attachments.Add asrs2
End If

objMail.Display

End With

End If

i = i + 1

Loop

Set objOutlook = Nothing

MsgBox "送信完了しました"
End Sub

「VBAでoutlook365が起動しませ」の質問画像

A 回答 (4件)

#1です、


Option Explicitを付けて混乱してしまっているかも知れませんし
少し判り難かったかも・・なので重複しますが補足します

見当違いかもしれませんが・・・
エラーが出ないので、設定ではないと思います
Outlookが起動しないように見える(メールItemも表示されない)と言う事は

条件の外でSet objOutlook = New Outlook.Applicationで起動
なので起動しているはず
条件に一致でSet objMail = objOutlook.CreateItem(olMailItem)で
メール作成なので条件に一致した処理が1度も行われていない可能性があります("○" で処理されていな可能性があります)

"○"には文字種がありますのでセルに入力されている ○ をコード内の ○ (又は逆)にコピペしてみて実行してみてください


Option Explicitについては変数宣言を強制するオプションです
オプション設定する事で問題点が判り易くなりますが、一定のスキルが必要になります
Option Explicitを奨めた訳
モジュール文頭にOption Explicitを付けていなければ
エラーにはならないかも知れませんが、修正すべき箇所が見受けられます
objOutlook.CreateItem(olMailTtem)は
objOutlook.CreateItem(olMailItem)

asrs1 asrs2  多分 adrs1 adrs2の間違え

以下はその他
With wsMailは使われていません(.Rangeのようにする必要があります)
objMail.bodyについては他の場所と同じような書き方に・・

objMail.Attachments.Add
ファイルの存在を確認した方が良いです、なければエラーで止まります
予防の為
If Dir(tenp1) <> "" Then objMail.Attachments.Add tenp1
とか・・

送信や保存についてはすでに回答にある通りですね
確認せずに送るのは怖いけれど、定型ならOKかな
    • good
    • 0
この回答へのお礼

Qchan1962様
いつも返信ありがとうございます。
うまくいきました。
『"○"には文字種がありますのでセルに入力されている ○ をコード内の ○ (又は逆)にコピペしてみて実行してみてください』で成功です。
初歩的なことだったんですね。ありがとうございます。
ただ、追加で確認を求める画面が出てくとよいのですが
どの部分に何という構文を入れたらよいのかが。。。
恐れ入りますが、こちらもわかりましたら教えて頂けませんでしょうか。

お礼日時:2022/08/26 11:35

こんにちは



>outlookが起動しませんし下書ホルダにも保存されません。
起動していないとするとエラーが発生すると思いますが、「起動していない事」をどのようにして確認しましたか?
保存や送信がされないのは(既回答にもありますが)保存も送信もしていないから。

>objMail.Display
の後に、
 Stop
あるいは、
 Msgbox "OK?"
などを入れておけば、元のデータに応じて、順に内容が表示されませんか?

正しく表示されない様であれば、メール作成部分に間違えがあるのでしょうから、内容を再チェックしてみてください。
(どのように作成なさりたいのか説明がないので、回答者にはわかりません)
正しく表示できているのなら、メールを送るなり保存するなりの処理を加えれば良いものと思われます。
    • good
    • 0
この回答へのお礼

fujillin様
返信ありがとうございました。

お礼日時:2022/08/26 11:36

objMail.Displayは内容表示。



肝心の送信と保存が無いけど・・・・、どーして??

objMail.Send:送信
objMail.Save:保存
    • good
    • 0
この回答へのお礼

t_fumiaki様
返信ありがとうございした。

お礼日時:2022/08/26 11:37

急いでいるようなので、ざっくり見た感じで回答します


>『"送信完了しました』のメッセージは出るのですが
このメッセージを出すコードの条件は、メッセージ内容と異なります
(Outlookの処理をしなくても表示される。場所、条件になっています)

Do Until ActiveCell.Offset(i, 0).Value = ""
'送付チェック欄が○なら作業を続ける
If ActiveCell.Offset(i, 2).Value = "○" Then
の条件にマッチしているか確認してみてください

最後までエラー無く実行されるのであれば、F8などでステップ実行して
挙動を確かめてみましょう。

また、
モジュール文頭にOption Explicitを追加して変数名、プロパティなどを確認してください
    • good
    • 0

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