Excel (VBA)

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

 
(Windows 10全般 : Excel 2016)
実行エラー13
投稿日時: 20/02/26 15:51:21
投稿者: chokobanana

時間指定してOutlookを自動で送信させたいです
参考にしていた構文でエラーがでてしまいました
ご指導お願いします。
 
実行時エラー13 型が一致しません
mailItemObj.DeferredDeliveryTime = d & " " & t ←黄色の箇所
Excel  B9:2020/02/26
    B10:16:00:00
 
_____________
Option Explicit
Sub sendmail_fixedtime()
 
'---コード1|outlookを起動する
    Dim toaddress, ccaddress, bccaddress As String '変数設定:To宛先、cc宛先、bcc宛先
    Dim subject, mailBody, credit As String '変数設定:件名、メール本文、クレジット、添付
    Dim outlookObj As Outlook.Application 'Outlookで使用するオブジェクト生成
    Dim mailItemObj As Outlook.MailItem 'Outlookで使用するオブジェクト生成
             
'---コード2|差出人、本文、署名を取得する---
    toaddress = Range("B2").Value 'To宛先
    ccaddress = Range("B3").Value 'cc宛先
    bccaddress = Range("B4").Value 'bcc宛先
    subject = Range("B5").Value '件名
    mailBody = Range("B6").Value 'メール本文
    credit = Range("B7").Value 'クレジット
 
'---コード3|メールを作成して、差出人、本文、署名を入れ込む---
    Set outlookObj = CreateObject("Outlook.Application")
    Set mailItemObj = outlookObj.CreateItem(olMailItem)
    mailItemObj.BodyFormat = 3 'リッチテキストに変更
    mailItemObj.To = toaddress 'to宛先をセット
    mailItemObj.CC = ccaddress 'cc宛先をセット
    mailItemObj.BCC = bccaddress 'bcc宛先をセット
    mailItemObj.subject = subject '件名をセット
     
'---コード4|メール本文を改行する
    mailItemObj.Body = mailBody & vbCrLf & vbCrLf & credit 'メール本文 改行 改行 クレジット
     
'---コード5|自動で添付ファイルを付ける---
    Dim attached As String
    Dim myattachments As Outlook.Attachments 'Outlookで使用するオブジェクト生成
    Set myattachments = mailItemObj.Attachments
    attached = Range("B8").Value '添付ファイル
    myattachments.Add attached
     
'---コード6|メール送信する時間を設定する---
    Dim d As Date
    Dim t As Variant
     
    d = Range("B9").Value
    t = Range("B10").Value
     
    mailItemObj.DeferredDeliveryTime = d & " " & t
 
'---コード7|メールを送信する---
    'mailItemObj.Save '下書き保存
    mailItemObj.Display 'メール表示(ここでは誤送信を防ぐために表示だけにして、メール送信はしない)
    mailItemObj.Send
 
'---コード8|outlookを閉じる(オブジェクトの解放)---
    Set outlookObj = Nothing
    Set mailItemObj = Nothing
     
End Sub
 

回答
投稿日時: 20/02/26 16:45:51
投稿者: sk

引用:
Dim t As Variant

Dim t As Date
 
引用:
Excel  B9:2020/02/26
    B10:16:00:00

引用:
mailItemObj.DeferredDeliveryTime = d & " " & t

・変数 t のデータ型が Variant 型である場合、B10 セルの値が
 代入された際において内部処理上は Double 型のデータ
 ( 0.666666666666667 という数値)として処理されている。
 
・その値を & 演算子によって他の変数の値/リテラルと文字列結合する
 (と同時に String 型のデータに型変換される)ことにより、
 最終的に "2020/02/26 0.666666666666667" という文字列が
 DeferredDeliveryTime プロパティに設定されようとしている。
 
・DeferredDeliveryTime プロパティのデータ型は Date 型であるのに対し、
 上記の文字列は「 Date 型に変換できないテキスト」であるため、
 型不一致エラーが発生する。

投稿日時: 20/02/26 17:10:10
投稿者: chokobanana

ありがとうございます。
Date型に修正しましたらエラーが出なくなりました
丁寧に説明頂き感謝します。