★Excel2019のVBAからのOutlook2019でのメール送信あれこれ

  
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
  

★ メールが即時送信できる条件

基本、Outlookが起動していること。
起動していない場合は、「Send」メソッドを実行したとしても、「次回起動時」でないと送信されません。

※「起動している」とは、例えばOutlook2019の場合、
(a)普通に画面が見えている状態で普通に起動しているか、
(b)オブジェクト(グローバル変数)として起動され、タスクトレイに常駐しているか、
(c)または、オブジェクト(グローバル変数)として非表示で起動しているか、
  (↑(c)は、本当にこの状態があるのかどうかわかりません。未確認です。)
のどれか、です。

※参考図
(b)の場合のタスクトレイ常駐例

なお、(b)の場合は、「普通に画面が見えている状態」ではないわけですが、でも、ちゃんとメールが送れます。日時指定してあっても送れます。(ただし、以降に書いた注意事項を守る必要があります。)

あと、(b)と(c)の、『 オブジェクト(グローバル変数)として起動している場合 』は、そのオブジェクト(グローバル変数)のコードが書かれたExcelファイルを閉じると、それと道連れに『 Outlookが起動した状態 』が消滅してしまうので、メールが送れないことが多々あります。
なので(少なくともメールが全部送れるまでは)、その「コードが書かれたExcelファイル」を閉じないように注意しなければなりません。
もし、例えば(b)の場合で、「数日後に指定した時刻にメールを送れるようにしたい」という場合は、その日時が来るまで、パソコンをシャットダウンさせずに、かつ、その「コードが書かれたExcelファイル」を閉じないで開きっぱなしにしておく必要があります。(もし1度でもパソコンをシャットダウンさせてしまったのなら、その指定した日時まで、毎日、Outlookを「普通に開きっぱなし」にしておかないと指定した日時にメールが送信されません。)
※後日判明:日時指定は、(b)と(c)の場合、コード実行時刻から数時間が空いてしまうと、メールが送れないもようです。送信トレイに溜まったままでした。
Outlookをちゃんと通常起動してないとダメでした。
即送信や30分以内くらいの時間指定なら、もちろん(b)や(c)でもOKですが、
結局のところ、「Outlookを普通に起動・開いたほうが無難」な気がします。
  

★ 「Gmail」でメール送信

参考
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11243243566

メール送信には、「CDO」というものを使う・・・、という方法もあるようですが、
https://www.ka-net.org/blog/?p=12806
にも書いてありますが、
2021年5月現在、「Gmailに限って」はそれは使えなくなったようです。

事前に、「Outlook」で「Gmail」が「送受信」できる状態にしておかなければなりません。
その際、Gmail側でも少し設定が要ります。
その際、以下の、2と3だけは先にやっておいたほうがいいかもです。
Outlook2016/2019でGmailのPOP/IMAP・SMTPが設定できない時の対処法
そのうえで、以下のようにOutlookで設定してみます。
Gmail アカウントを Outlook に追加する

詳しいことはこちら↓
★Excel2019のVBAからの「Gmail」でのメール送信(Outlook2019利用)
一覧表から、「名前」で絞り込んだ結果のリストを「PDF化」し、「名前」に紐付いたメールアドレスにGamailにて送信する・・・というサンプルです。
  

★ メールの本文の中にパソコンのフォルダパスのハイパーリンクを含めて送信

※参考Webページ
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12245174832

A1セルに以下のHTMLを書いておきます。

↑これは、「d:\1」というフォルダが届いたメールの本文画面から、クリックにて直接開けるようになる内容です。上図もご参照ください。

↓ 以下のプログラムは「参照設定」は何もしないことが前提です。
↓ また、前述の(b)のように、Outlookをタスクトレイに常駐させたい場合は、
↓ 「Dim olkapp As Object」を、モジュールの先頭の宣言部分に移動させる
↓ 必要があります。でないと、Excelファイルを閉じなくても、Outlookの常駐が
↓ すぐに消えてしまうので・・・。
↓ Excelファイルを開いているあいだじゅう、Outlookをタスクトレイに常駐
↓ させたい場合は、「olkapp」をグローバル変数にして、かつ、Excelファイルも
↓ 閉じない、という2つのことを行う必要があります。

↓ ※必要に応じて、「Dim objMail As Object」の行も同じことをします。

  

★ 日付と時間を指定してメールを送る

これも、指定した日時で正しくメール送信するには、基本、Outlookが起動している必要があります。

例えば、

Dim olkapp As Object

の1行を「Sub test()」の前に書いて、

かつ、
プログラム実行後、すべてのメールが時刻通り自動送信され尽くすまで、
このExcelファイルを閉じないでおくか、

あるいは、

逆に、Excelファイルを閉じるなら、
Outlookを起動しておいて、その画面を開きっぱなしにしておかないと、
指定した時刻に送信できませんでした。

※参考Webページ
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11244514481

↓ 以下のプログラムは「参照設定」は何もしないことが前提です。
↓ また、前述の(b)のように、Outlookをタスクトレイに常駐させたい場合は、
↓ 「Dim olkapp As Object」を、モジュールの先頭の宣言部分に移動させる
↓ 必要があります。でないと、Excelファイルを閉じなくても、Outlookの常駐が
↓ すぐに消えてしまうので・・・。
↓ Excelファイルを開いているあいだじゅう、Outlookをタスクトレイに常駐
↓ させたい場合は、「olkapp」をグローバル変数にして、かつ、Excelファイルも
↓ 閉じない、という2つのことを行う必要があります。

↓ ※必要に応じて、「Dim objMsg As Object」の行も同じことをします。

  
  
★ Outlookを「どうしても起動させずにメールを送りたい」という場合

前述の2つのサンプルにおいて、

Outlookを「どうしても起動させずにメールを送りたい」という場合は

「Dim olkapp As Object」

「Sub CreateHTMLMail()」
の上・・・

というか、モジュールの一番上の宣言部分に移動させて、

「'Outlookの起動」
から
「'↑起動しきるまで待つ」
のブロックを全部コメントアウトし、

「' Set olkapp = CreateObject("Outlook.Application")」

のコメントアウトをはずします。

タスクトレイにOutlookのアイコンができて、送信ができます。

ただし、実行後にプログラムのExcelファイルを閉じてしまうと、タスクトレイのOutlookアイコンがしばらくすると消えてしまうので、正常に遅れないか、まったく送れなくなるのいずれかになると思いますので、ご注意ください。
起動させたほうが確実です。