Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何在Outlook中正确运行宏_Vba_Outlook - Fatal编程技术网

Vba 如何在Outlook中正确运行宏

Vba 如何在Outlook中正确运行宏,vba,outlook,Vba,Outlook,我相信这个问题很常见,但我得到了一个非常独特的情况 我有一个代码,我正在使用延迟交付。 但问题是我无法运行宏 Public Sub Applicaion_Reminder(ByVal Item As Object) Dim objPeriodicalMail As MailItem If Item.Class = olTask Then If InStr(LCase(Item.Subject), "send an email periodically"

我相信这个问题很常见,但我得到了一个非常独特的情况

我有一个代码,我正在使用延迟交付。 但问题是我无法运行宏

Public Sub Applicaion_Reminder(ByVal Item As Object)
Dim objPeriodicalMail As MailItem
 
    If Item.Class = olTask Then
       If InStr(LCase(Item.Subject), "send an email periodically") Then
          Set objPeriodicalMail = Outlook.Application.CreateItem(olMailItem)
          'Change the following email information as per your actual needs
          With objPeriodicalMail
               .Subject = "Email to Gmail"
               .To = "bfarhan8@gmail.com"
               .HTMLBody = "<HTML><BODY>It's a Test</HTML></BODY>"
               
               .Importance = olImportanceHigh
               .ReadReceiptRequested = True
               .Send
          End With
       End If
    End If
End Sub
Public Sub application\u提醒(ByVal项作为对象)
Dim objPeriodicalMail作为邮件项
如果Item.Class=olTask,则
如果InStr(LCase(项目主题),“定期发送电子邮件”),则
设置objPeriodicalMail=Outlook.Application.CreateItem(olMailItem)
'根据您的实际需要更改以下电子邮件信息
带有objPeriodicalMail
.Subject=“发送电子邮件至Gmail”
.To=”bfarhan8@gmail.com"
.HTMLBody=“这是一个测试”
.重要性=低重要性高
.ReadReceiptRequested=True
.发送
以
如果结束
如果结束
端接头
当我点击run时,它会询问我宏名称。当我定义一个名称时,它会创建一个新的Sub

如果我删除

应用程序提醒()
要将名称与宏名称匹配,第3行会出现错误。


我的问题是如何正确运行此宏。我在网上搜索了一下,但没有找到任何有用的帮助。

你错过的是,宏可以是子例程,也可以是函数,每种宏有两种主要类型

子例程执行某些操作。您的
应用程序\u提醒
是一个子例程,因为它执行以下操作:发送提醒。函数可以做一些事情,但它的真正目的是返回一个值

有些子程序和函数需要参数,但有些不需要

如果我写一个函数
Sqrt
,直接的问题是:什么的平方根?我想能够写:

Answer = Sqrt(5)
也就是说,今天我想要5的平方根。明天,我可能需要7的平方根

我会写:

 Function Sqrt(ByVal Number as Double) as Double
 ‘ Code to calculate square root of Number
 Sqrt = ResultOfCalculation
End Function
几乎所有函数都有参数,但不是必需的。我可以有一个函数,
GetCurrentTemperature
,它读取温度计并返回温度。它不需要参数

您已经编写了一个具有参数的子例程:
application\u rementer(ByVal项作为对象)
。当您尝试运行
application\u-rementer
时,口译员想知道什么是
。我认为口译员的回答不太明智。它应该告诉您,“您不能使用参数运行子例程。”

您需要一个没有参数的子例程,该参数决定要处理的
项。对于某些计算机语言,该子例程必须具有名称
Main
。使用VBA,它可以有任何名称

也就是说,您需要这样的子例程:

Sub PickAnItemThatNeedsAReminder()
  Dim Item as Object
  ‘ Code to set Item to the required MailItem
 Call Applicaion_Reminder(Item)
End Sub  
选择
邮件项目有四种不同的方法。我想象你在“已发送邮件”文件夹下滚动,寻找尚未收到回复的电子邮件。当您发现这样的电子邮件时,您会运行
PickanitemthatNeedsReminder
,它会发送提醒

Sub PickAnItemThatNeedsAReminder ()

  Dim Exp As Explorer
  Dim Item As Object

  Set Exp = Outlook.Application.ActiveExplorer
  
  If Exp.Selection.Count = 0 Then
    Call MsgBox("Please select one or more emails then try again", vbOKOnly)
    Exit Sub
  Else
    For Each Item In Exp.Selection
      Call Applicaion_Reminder(Item)
    Next
  End If

End Sub
Exp.Selection
是当前选择的所有电子邮件的列表。您可以选择任意数量的电子邮件,然后它们运行
需要提醒的Pickanitem
。它将为每个选定的电子邮件调用
application\u提醒

附加背景

我相信你已经找到了一个活动的常规,并试图使其适应你的要求。事件是Outlook非常有用的功能。但是,如果您还不了解在没有参数的情况下无法运行宏,那么您还没有准备好处理事件。我们说:先走后跑

如果要使用事件,BraX和Super Symmetry会正确地告诉您使用
ThisOutlookSession
。我建议您使用Explorer(从技术上讲,它是一个事件),但对于初学者来说,它比您似乎发现的应用程序级事件更容易理解。按照我的方法,所有代码都可以放在普通模块中。

在显示提醒之前立即出现 设置带有提醒的任务项,然后调用vba函数-
application\u提醒

参见此答案的示例


如果您想使用选定的电子邮件调用它,请参见

我遵循了此链接中的要求。以下是您没有遵循的说明:
将以下VBA代码复制到“ThisOutlookSession”项目中。
我遵循了所有要求。看到左上角的小树了吗?查看一项如何称为“ThisOutlookSession”,另一项如何称为“Module1”?你把它放错地方了。你不应该防御性,我们有时都会出错@布拉克斯是绝对正确的,他只是想帮助你。您需要双击“ThisOutlookSession”并将代码粘贴到那里。感谢您的解释。实际上,我想在“任务”中定义的特定时间发送电子邮件。我已经尝试了你的代码,但它没有响应我需要的。我想做的是,首先我想在今天晚上7点发送一封电子邮件,然后我想在明天早上8点发送一封电子邮件,其他几天也一样,我有一个脚本,它在晚上7点运行得很好,但是这个脚本在每天早上8点发送电子邮件不起作用。猜猜我遗漏了什么?这个网站的目标之一是建立一个可以索引的问题和答案数据库。不鼓励使用辅助问题,因为它们很难索引。关于在特定时间发送电子邮件的问题是与当前问题无关的新问题。如果答案对你有帮助,你应该接受,寻找关于在特定时间发送电子邮件的问题,如有必要,发布一个新的问题,并附上不符合你要求的代码。