VBA日期类型不匹配

VBA日期类型不匹配,vba,excel,excel-2010,Vba,Excel,Excel 2010,我试图在VBA中使用vlookup函数,以便根据当前日期将其与excel工作表中的日期匹配,并给出相应的值。这将通过邮件发送。我的问题是,当我将一个变量声明为日期时,它的类型不匹配,但如果它是字符串,它就没有任何问题(但我还必须以文本格式在工作簿中输入相应的值)。这有点乏味。我一直在excel中使用短日期,但找不到显示类型不匹配的线索。代码如下所述 Sub Send_Email_Using_VBA() Dim Email_Subject, Email_Send_From, Email_S

我试图在VBA中使用vlookup函数,以便根据当前日期将其与excel工作表中的日期匹配,并给出相应的值。这将通过邮件发送。我的问题是,当我将一个变量声明为日期时,它的类型不匹配,但如果它是字符串,它就没有任何问题(但我还必须以文本格式在工作簿中输入相应的值)。这有点乏味。我一直在excel中使用短日期,但找不到显示类型不匹配的线索。代码如下所述

Sub Send_Email_Using_VBA()
    Dim Email_Subject, Email_Send_From, Email_Send_To, _
        Email_Cc, Email_Bcc, Email_Body As String
    Dim Ldate As Date
    Dim Mail_Object, Mail_Single As Variant

    Email_Subject = "Trying to send email using VBA"
    Email_Send_From = "*****@*****.***"
    Email_Send_To = "***@****.***"
    Email_Cc = ""
    Email_Bcc = ""
    Ldate = Date
    Email_Body = Application.VLookup(Ldate, Sheet1.Range("A1:B4"), 2, False)

    On Error GoTo debugs
    Set Mail_Object = CreateObject("Outlook.Application")
    Set Mail_Single = Mail_Object.CreateItem(0)

    With Mail_Single
        .Subject = Email_Subject
        .To = Email_Send_To
        .cc = Email_Cc
        .BCC = Email_Bcc
        .Body = Email_Body
        .send
    End With
    Exit Sub

debugs:
    If Err.Description <> "" Then MsgBox Err.Description
End Sub
Sub-Send_Email_使用_VBA()
Dim Email_主题、Email_Send_From、Email_Send_To、_
电子邮件抄送、电子邮件密件抄送、电子邮件正文为字符串
日期
Dim Mail_对象,Mail_单个作为变量
Email\u Subject=“尝试使用VBA发送电子邮件”
电子邮件发送地址:“******@***********”
电子邮件发送至=“***@********”
电子邮件_Cc=“”
电子邮件_Bcc=“”
Ldate=日期
Email_Body=Application.VLookup(Ldate,Sheet1.Range(“A1:B4”),2,False)
关于错误转到调试
设置Mail\u Object=CreateObject(“Outlook.Application”)
设置Mail\u Single=Mail\u Object.CreateItem(0)
单程邮寄
.Subject=电子邮件主题
.To=发送电子邮件至
.cc=电子邮件\u cc
.BCC=电子邮件\u BCC
.Body=电子邮件\正文
.发送
以
出口接头
调试:
如果错误描述为“”,则MsgBox错误描述为“”
端接头

我建议您将Sheet1.Range(“A1:B4”)更改为Sheet1.Range(“A1:B4”)。值,以便将数组传递给VLookup,而不是Range对象

VLookup
WorksheetFunction
的成员,因此您应该将
Application.VLookup
更改为
WorksheetFunction.VLookup

我使用了以下测试数据:

电子邮件是通过在vlookup中传递范围值来传递的

    Dim Email_Subject
    Dim Email_Send_From As String
    Dim Email_Send_To As String
    Dim Email_Cc As String
    Dim Email_Bcc As String
    Dim Email_Body As String
    Dim Mail_Object
    Dim Mail_Single As Variant

    Email_Subject = "Trying to send email using VBA"
    Email_Send_From = "*****@*****.***"
    Email_Send_To = "***@****.***"
    Email_Cc = ""
    Email_Bcc = ""

    On Error GoTo Failed_Lookup
    Email_Body = WorksheetFunction.VLookup(Format(Date, "dd-mm-yyyy"), Sheet1.Range("A1:B4").Value, 2, False)

    On Error GoTo debugs
    Set Mail_Object = CreateObject("Outlook.Application")
    Set Mail_Single = Mail_Object.CreateItem(0)

    With Mail_Single
        .Subject = Email_Subject
        .To = Email_Send_To
        .cc = Email_Cc
        .BCC = Email_Bcc
        .Body = Email_Body
        .send
    End With

    Exit Sub

debugs:
    If Err.Description <> "" Then MsgBox Err.Description
    Exit Sub

Failed_Lookup:
    If Err.Number = 1004 Then
        MsgBox "Unable to find the date " & Date
    End If

Dim Email\u主题
Dim Email_Send_From As String
Dim Email_Send_To As String
Dim Email_Cc As String
Dim电子邮件\u密件抄送为字符串
将电子邮件正文变暗为字符串
暗邮件对象
Dim Mail_单个作为变体
Email\u Subject=“尝试使用VBA发送电子邮件”
电子邮件发送地址:“******@***********”
电子邮件发送至=“***@********”
电子邮件_Cc=“”
电子邮件_Bcc=“”
错误时转到失败的\u查找
Email_Body=WorksheetFunction.VLookup(格式(日期,“dd-mm-yyyy”),Sheet1.Range(“A1:B4”)。值,2,False)
关于错误转到调试
设置Mail\u Object=CreateObject(“Outlook.Application”)
设置Mail\u Single=Mail\u Object.CreateItem(0)
单程邮寄
.Subject=电子邮件主题
.To=发送电子邮件至
.cc=电子邮件\u cc
.BCC=电子邮件\u BCC
.Body=电子邮件\正文
.发送
以
出口接头
调试:
如果错误描述为“”,则MsgBox错误描述为“”
出口接头
失败的\u查找:
如果错误编号=1004,则
MsgBox“找不到日期”&日期
如果结束

首先,请注意电子邮件主题是变体,电子邮件正文是字符串。
将LDate设置为字符串
然后
LDate=CStr(日期)
?我尝试了上面的代码,但它抛出了错误号1004。我正在使用dd-mm-yyyy中的日期格式,甚至通过自定义设置尝试了上面的格式,但仍然显示相同的错误谢谢帮助。你能告诉我为什么它不是以dd-mm-yyyy格式工作,而是以这种格式工作。因为,我无法使用格式画师将其转换为这种格式。只需使用format()以与工作表上的格式相同的格式获取日期<代码>工作表函数.VLookup(格式(Ldate,“dd-mm-yyyy”),表1.范围(“A1:B4”)。值,2,False)