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