Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 从新到的邮件中获取信息_Vba_Outlook - Fatal编程技术网

Vba 从新到的邮件中获取信息

Vba 从新到的邮件中获取信息,vba,outlook,Vba,Outlook,我正在开发一个VBA程序,它将在Outlook中为新收到的电子邮件触发。(标准在Outlook的“规则和警报”中设置。) 这些电子邮件应包括:- “主题”字段包括:“工单名称/任务名称” “Body”的第一行包括:“operation” “String_1”、“String_2”、“String_3”和发件人的电子邮件地址将输入到批处理文件中(共4个参数) 这是我的代码: 子变更主题然后发送(项目为Outlook.MailItem) WO=读取命令(Item.Subject,1) 任务=读取命令

我正在开发一个VBA程序,它将在Outlook中为新收到的电子邮件触发。(标准在Outlook的“规则和警报”中设置。)

这些电子邮件应包括:-

“主题”字段包括:“工单名称/任务名称”

“Body”的第一行包括:“operation”

“String_1”、“String_2”、“String_3”和发件人的电子邮件地址将输入到批处理文件中(共4个参数)

这是我的代码:

子变更主题然后发送(项目为Outlook.MailItem)
WO=读取命令(Item.Subject,1)
任务=读取命令(Item.Subject,2)
将我设置为Outlook.MailItem
作为字符串的Dim sText
对于Application.ActiveExplorer.Selection中的每个olItem
sText=分子筛体
下一代
Shell(“C:\warehouse\WO\checkInOutTask\taskOperations.bat”&WO&&Task&&Item.SenderEmailAddress&&sText),vbNormalFocus
端接头
公共函数readCommand(str为字符串,位置为整数)为字符串
Dim Tempstr()作为字符串
如果位置>=1,则
Tempstr=Split(str,“/”)
readCommand=Tempstr(位置-1)
如果结束
端函数
它提供Outlook中当前选定的电子邮件条目的内容,而不是新到达的电子邮件


如何使脚本针对新收到的电子邮件运行?

打开Outlook Visual Basic编辑器时,您将看到的最小项目资源管理器如下所示:

如果在“Project1(VbaProject.OTM)”上单击加号,则它将扩展为:

您的初始视图很可能是这样的,表单(如果有的话)和模块已经展开。但是“MicrosoftOfficeOutlook对象”可能不会被扩展。单击其上的加号以获取:

单击“ThisOutlookSession”将其选中,您将获得:

“ThisOutlookSession”类似于一个模块,但它有额外的权限。特别是,您可以在此处指定事件例程。您的将是空的,但在这里您可以看到我为您创建的代码

当登录过程完成时,将调用私有子应用程序\u MAPILogonComplete()。我已经包含了将
Public with events MyNewItems初始化为Outlook.Items的代码。由于这种初始化,每次将新项目添加到收件箱时,都会调用私有子myNewItems\u ItemAdd(ByVal Item作为对象)
。“我的代码”只是在即时窗口中显示新项目的主题,但是,如果您将我的代码替换为您的代码,您应该能够获得您想要的效果

将下面的代码添加到“ThisOutlookSession”中,然后退出并重新进入Outlook。无论如何,你可能会收到足够多的新电子邮件,但如果没有,就给自己发一些电子邮件

Option Explicit
Public WithEvents MyNewItems As Outlook.Items
Private Sub Application_MAPILogonComplete()

  Dim NS As NameSpace

  Set NS = CreateObject("Outlook.Application").GetNamespace("MAPI")

  With NS
    Set MyNewItems = NS.GetDefaultFolder(olFolderInbox).Items
  End With

End Sub
Private Sub myNewItems_ItemAdd(ByVal Item As Object)

  With Item
    Debug.Print "Item added to Inbox with Subject: " & .Subject
  End With

End Sub

你想让你的代码在每次新邮件到达时运行吗?然后你应该考虑使用<代码> TutoOutlook会话事件。您将在那里看到
收件箱添加项目
事件。