Vba 如果今天发送电子邮件';s日期在到期日的四天内
我肯定会被认为是vba初学者,我正试图在我的项目管理电子表格中构建一个自动电子邮件提醒,当今天的日期在到期日的4天之内时。但我使用的代码不断返回运行时错误13:类型不匹配 我已经搜索了整个互联网的神圣大厅,寻找这个解决方案,但似乎没有任何东西与我的具体问题相匹配,或者我只是在将其他帖子中的原则应用于这个特定代码时遇到了问题 这是代码Vba 如果今天发送电子邮件';s日期在到期日的四天内,vba,excel,Vba,Excel,我肯定会被认为是vba初学者,我正试图在我的项目管理电子表格中构建一个自动电子邮件提醒,当今天的日期在到期日的4天之内时。但我使用的代码不断返回运行时错误13:类型不匹配 我已经搜索了整个互联网的神圣大厅,寻找这个解决方案,但似乎没有任何东西与我的具体问题相匹配,或者我只是在将其他帖子中的原则应用于这个特定代码时遇到了问题 这是代码 Option Explicit Sub email() Dim r As Range Dim cell As Range Set r
Option Explicit
Sub email()
Dim r As Range
Dim cell As Range
Set r = Range("D4:D154")
For Each cell In r
If r.Value <= (Date + 4) And r.Value >= (Date + 0) Then
Dim Email_Subject, Email_Send_From, Email_Send_To, _
Email_Cc, Email_Bcc, Email_Body As String
Dim Mail_Object, Mail_Single As Variant
Email_Subject = ActiveCell(0, 2) & ActiveCell(0, -2) & "is due"
Email_Send_From = "me@domain.com"
Email_Send_To = Cells(1, 11)
Email_Body = "This is an automated reminder to update BSA Project Manager on your project."
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
.Body = Email_Body
.send
End With
End If
Next
选项显式
子电子邮件()
调光范围
暗淡单元格作为范围
设置r=范围(“D4:D154”)
对于r中的每个单元格
如果r.值=(日期+0),则
Dim Email_主题、Email_Send_From、Email_Send_To、_
电子邮件抄送、电子邮件密件抄送、电子邮件正文为字符串
Dim Mail_对象,Mail_单个作为变量
Email_Subject=ActiveCell(0,2)&ActiveCell(0,-2)&“到期”
电子邮件\u发送\u发件人=”me@domain.com"
电子邮件发送到=单元格(1,11)
Email_Body=“这是一个自动提醒,用于更新BSA项目经理关于您项目的信息。”
关于错误转到调试
设置Mail\u Object=CreateObject(“Outlook.Application”)
设置Mail\u Single=Mail\u Object.CreateItem(0)
单程邮寄
.Subject=电子邮件主题
.To=发送电子邮件至
.Body=电子邮件\正文
.发送
以
如果结束
下一个
If r.value上返回的错误正在清理并稍微简化此代码-这里有几点需要考虑:
- 当一个接一个地声明变量时,您需要为声明的每个变量指定它们的类型:
-否则,只有最后一个变量声明为Dim Email\u Subject As String,Dim Email\u Send\u From As String,等等。
,其余变量声明为String
sVariant
- 在引用
范围时,最好明确声明您使用的
和工作簿
——因此指定哪个工作表工作表
处于启用状态范围(“D4:D154”)
- 您的类型不匹配错误是因为尝试将
与r.Value
进行比较,而不是将(日期+4)
进行比较-您毕竟是在每个单元格.Value
单元格中循环
- 不要在循环中使用
,只需使用ActiveCell
然后使用cell
引用右侧或左侧的列即可Offset
Sub-email()
变暗r作为范围,单元格作为范围
将ws设置为工作表
将邮件对象设置为对象,将邮件对象设置为单个对象
Dim Email_Subject As String,Email_Send_From As String,Email_Send_To As String_
电子邮件抄送为字符串,电子邮件抄送为字符串,电子邮件正文为字符串
将ws=ThisWorkbook.Worksheets(“Sheet1”)更改为工作表名称
设置r=ws.范围(“D4:D154”)
设置Mail\u Object=CreateObject(“Outlook.Application”)
对于r中的每个单元格
如果cell.Value=(日期),则
Email_Subject=cell.Offset(,1)。Value&cell.Offset(,-1)。Value&“到期”
电子邮件\u发送\u发件人=”me@domain.com"
Email\u Send\u To=ws.Cells(1,11).Value
Email_Body=“这是一个自动提醒,用于更新BSA项目经理关于您项目的信息。”
关于错误转到调试
设置Mail\u Single=Mail\u Object.CreateItem(0)
单程邮寄
.Subject=电子邮件主题
.To=发送电子邮件至
.Body=电子邮件\正文
.发送
以
如果结束
下一个细胞
'... 更多代码
端接头
在r
中循环遍历每个单元格
——然后检查r.Value
…-这应该是如果cell.Value…
也-当Dim
-ing时,您需要指定变量的类型,即Dim Email\u Subject As String,Email\u Send\u From As String
。如果没有指定这些变量,那么这些变量实际上是Variant
sAlso-是否有任何理由在循环中使用ActiveCell
?您的意思是使用单元格
?您还可以将Set Mail\u Object=CreateObject…
移动到每个循环的之前-您只需Set Mail\u Object
先生,一旦您是绅士和学者。非常感谢。我确实尝试过使用cell.Value,但没有用,但我认为我在那个特定的迭代过程中犯了其他错误。至于ActiveCell
,我之所以选择它,是因为我想要该行上特定日期旁边的单元格中的信息。当我将其更改为cell
时,我的电子邮件会发送,但主题行仅包含“到期”字样,而没有从相关日期旁边的单元格中提取。
Sub email()
Dim r As Range, cell As Range
Dim ws As Worksheet
Dim Mail_Object As Object, Mail_Single As Object
Dim Email_Subject As String, Email_Send_From As String, Email_Send_To As String, _
Email_Cc As String, Email_Bcc As String, Email_Body As String
Set ws = ThisWorkbook.Worksheets("Sheet1") ' change to your sheet name
Set r = ws.Range("D4:D154")
Set Mail_Object = CreateObject("Outlook.Application")
For Each cell In r
If cell.Value <= (Date + 4) And cell.Value >= (Date) Then
Email_Subject = cell.Offset(, 1).Value & cell.Offset(, -1).Value & "is due"
Email_Send_From = "me@domain.com"
Email_Send_To = ws.Cells(1, 11).Value
Email_Body = "This is an automated reminder to update BSA Project Manager on your project."
On Error GoTo debugs
Set Mail_Single = Mail_Object.CreateItem(0)
With Mail_Single
.Subject = Email_Subject
.To = Email_Send_To
.Body = Email_Body
.Send
End With
End If
Next cell
'... more code
End Sub