Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Microsoft 365)
OUTLOOKでの自動送信
投稿日時: 24/10/11 13:02:32
投稿者: hareru

この掲示板での質問が適切でないかもしれませんが質問させてください。
 
EXCEL VBAでメール送信処理を作成しました。
自動実行なのでファイルを起動後、シートに登録済みのアドレスへメール送信するというものです。
 
実際にファイルを開くと、想定通りにメールを送信し、BOOKを閉じます。
 
質問はWindowsのタスクスケジュールに登録し実行すると、タスクは正常に終了(イベントログで確認済み)するのですが実際ににメールが送信されません。
以下はイベントビューア(Windowsログ>Application)でログを確認した内容です。
●手動でBOOKを起動した場合、
 レベル、日付と時刻、ソース、イベントID、タスクのカテゴリ
 情報、2024/10/11 10:25:00、Outlook、45、なし
 
●タスクスケジュールで実行した場合、
 情報、2024/10/11 10:51:12、Security-SPP、1003、なし
 情報、2024/10/11 10:51:12、Security-SPP、1003、なし
 情報、2024/10/11 10:51:00、Outlook、45、なし
 
違いは2行のSecurity-SPPのみで、内容は後述します。
手動でBOOKを実行し開いた時はメール送信出来ているのでVBAは問題ないかと思っています。
どなたかアドバイスを頂けないでしょうか?
 
宜しくお願いいたします。
-----------------------------------------------------------
ログの名前: Application
ソース: Microsoft-Windows-Security-SPP
日付: 2024/10/11 12:09:12
イベント ID: 1003
タスクのカテゴリ: なし
レベル: 情報
キーワード: クラシック
ユーザー: N/A
コンピューター: S-2019-P00649.cgad.internal.canon
説明:
ソフトウェア保護サービスによるライセンス状態チェックが完了しました。
アプリケーション ID=0ff1ce15-a989-479d-af46-f275c6370663
ライセンスの状態=
1: 149dbce7-a48e-44db-8364-a53386cd4580, 1, 0 [(0 [0xC004F014, 0, 0], [(?)(?)(?)(?)(?)(?)(?)(?)])(1 )(2 )(3 )]
2: 24fc428e-a37e-4996-ac66-8ea0304a152d, 1, 0 [(0 [0xC004F014, 0, 0], [(?)(?)(?)(?)(?)(?)(?)(?)])(1 )(2 )(3 )]
3: 26b6a7ce-b174-40aa-a114-316aa56ba9fc, 1, 0 [(0 [0xC004F014, 0, 0], [(?)(?)(?)(?)(?)(?)(?)(?)])(1 )(2 )(3 )]
   ・
   ・
   ・
18: ff02e86c-fef0-4063-b39f-74275cddd7c3, 1, 0 [(0 [0xC004F014, 0, 0], [(?)(?)(?)(?)(?)(?)(?)(?)])(1 )(2 )(3 )]
 
 

回答
投稿日時: 24/10/11 16:42:32
投稿者: Suzu

365は使用していないので、確認できませんが
 

引用:
ソース: Microsoft-Windows-Security-SPP

引用:
ソフトウェア保護サービスによるライセンス状態チェックが完了しました。

 
Microsoft-Windows-Security-SPP
https://learn.microsoft.com/ja-jp/windows-hardware/customize/desktop/unattend/microsoft-windows-security-spp
 
から、察するに、
 
タスクスケジュラーにて、起動時に、ライセンス認証が行われているのではないかと。
 
タスクスケジュラーにて、
 Excelの別ファイル起動
 Outlook の起動
 
を行い、同様に、
「Security-SPP、1003、なし」 となるのか確認してみましょう。
 
 
Excelにて、Outlookを起動し送信 Outlookの終了を、VBAを使って行っていますよね?
そのコードを参考に、VBSにて、Outlookを「起動(場合によっては可視化)」までを行って
起動されたOutlookが、通常操作と同様に操作できるか確認。
同様に、Excelのみ起動 を行い、ライセンス認証 有無の確認
 
スケジュラー → VBS → Outlook
スケジュラー → VBS → Excel
 
あとは、ExcelのVBAコードを変更し、Outlook起動/可視化に変更し
通常通りOutlook操作ができるか を確認してみましょう。
当然ならが、エラートラップは解除してテストするのですよ。
 
 
Outlookの ライセンス認証時に、メールアカウント情報まで読み込まれていないが
エラートラップで表面化しない様になっているのでは?
と予想しています。

投稿日時: 24/10/15 12:12:18
投稿者: hareru

Suzuさん、回答ありがとうございます。
 
>スケジュラー → VBS → Outlook
下記のVBSでメール送信を実行した所、VBSファイルを直接Wクリックするとメール送信は出来るのですがタスクスケジュールに登録し、実行するとログには正常に終了している(情報、2024/10/15 11:00:12、Outlook、45、なし)ようですが送信先にはメールは届いていません。
また、前回記載した"Security-SPP"のログは出力される時と出力されない時があるようです(複数回実行した結果)。
次に下記VBSを以下のように変更し実行しました。
mailobj.Display
'mailobj.Send
VBSファイルを直接実行するとOUTLOOK画面が表示されますが、タスクスケジュールで実行すると何も表示されません。
またログは、OUTLOOKが正常に終了している前回のログと"Security-SPP"はイベントID:1003が2本とイベントID:16394が1本の4つが出力されました。
しかし、複数回実行すると2回目以降のログは出力されません。
 
もし、何かわかる所があればアドバイスをお願いいたします。
------------------------------------------------------------------------------------------
Option Explicit
'-----------------------------------------
'-- 宣言
'-----------------------------------------
Dim mailAddress
Dim mailTo
Dim mailCc
Dim MailApp
Dim mailobj
Dim mailBody
Dim mailSubject
Dim mailAttachment
Dim timeZone
Dim byLine
Dim kaigyo
 
 
'-----------------------------------------
'-- 個人情報
'-----------------------------------------
'// 自分のメールアドレス
mailAddress = "XXX.XXX@XXX.XXX"
 
'// 送信先:TO
mailTo = "XXX.XXX@XXX.XXX"
 
'// 送信先:CC
'mailCc = "****.*****@****.***"
 
 
'-----------------------------------------
'-- オブジェクト生成
'-----------------------------------------
Set MailApp = CreateObject("Outlook.Application")
Set mailobj = MailApp.CreateItem(0)
 
'// 改行コード
kaigyo = vbCrLf
 
 
'-----------------------------------------
'-- 件名
'-----------------------------------------
mailSubject = "テストメール_"
mailSubject = mailSubject & Year(Date) & "/" & Right("0" & Month(Date), 2) & "/" & Right("0" & Day(Date), 2)
 
 
'-----------------------------------------
'-- 本文
'-----------------------------------------
mailBody = "送信テスト" & kaigyo
mailBody = mailBody & "テストメールです。" & kaigyo & kaigyo
 
 
'-----------------------------------------
'-- 署名
'-----------------------------------------
'// 署名設定
'byLine = "----------------------------------------------" & kaigyo
'byLine = byLine & "名前:*** ****" & kaigyo
'byLine = byLine & "会社:*************" & kaigyo
'byLine = byLine & "TEL:***-****-****" & kaigyo
'byLine = byLine & "Mail:***.****@**.***" & kaigyo
'byLine = byLine & "----------------------------------------------" & kaigyo
 
'// 署名を本文に追加
'mailBody = mailBody & byLine
 
 
'-----------------------------------------
'-- 添付ファイル
'-----------------------------------------
'mailAttachment = "ファイルフルパス"
 
 
'-----------------------------------------
'-- メール作成
'-----------------------------------------
mailobj.To = mailTo
mailobj.Cc = mailCc
mailobj.Subject = mailSubject
mailobj.Body = mailBody
'mailobj.Attachments.Add mailAttachment
'mailobj.Display
mailobj.Send
 
 
'-----------------------------------------
'-- オブジェクト開放
'-----------------------------------------
Set mailobj = Nothing
Set MailApp = Nothing
 
WScript.Quit 0
--------------------------------------------------------------

投稿日時: 24/10/17 15:23:03
投稿者: hareru

解決した内容を共有しておきます。
 
VBSが正しく動作し、完了しているかの確認をするためにDebugしたところ、以下で止まっている事が判明しました。
Set MailApp = CreateObject("Outlook.Application")
いろいろと調べているうちに、どうやらタスクスケジュールで実行する時のアカウントと関係しているらしい、と判断しました。
 
タスクの全般タブで実行アカウントを「ユーザがログインしているかどうかにかかわらず実行する」又は「最上位の特権で実行する」をテストしていました。
たぶん、この指定にするとシステムアカウントが利用されるのですが、そうするとOFFICE(OUTLOOK)のアカウントは持っていないので、ライセンス認証が出来ず、CreateObject("Outlook.Application")で止まってしまっていたのでは無いかと思います。
一方、デスクトップから実行する時は↑の設定をしてあってもログインしているユーザのアカウントが優先されてしまい、実行出来ていたと思います。
 
タスクのアカウントを「ユーザがログオンしている時のみ実行する」に変更しタスクで実行した所、想定通りに実行出来ました。
もちろん、ログインしているユーザはOFFICE(OUTLOOK)でライセンスは持っています。
 
以上です、ありがとうございました。