标签: outlook-vba

在Outlook(VBA)中附加主题标题

基本上,我们有一个规则设置,当在传入消息的正文中检测到代码字时运行脚本.该脚本将在前面附加一个单词追加当前主题标题.例如,Before:"Test Message",After:"Dept - Test Message".有任何想法吗?

vba append outlook-vba

5
推荐指数
1
解决办法
7551
查看次数

从Outlook获取收件箱

我在Outlook 2010中配置了两个Exchange帐户,但是我无法找到如何到达第二个帐户的收件箱.Session.GetDefaultFolder()总是返回第一个.

甚至枚举Session.Accounts,找到正确的帐户并调用Session.Account(found one).Store.GetDefaultFolder()返回错误的收件箱(来自默认的交换帐户,而不是辅助帐户).

outlook vba outlook-object-model outlook-vba outlook-addin

5
推荐指数
1
解决办法
5836
查看次数

如何用@替换'at'

我有大约17k的电子邮件包含订单,新闻,联系人等,可以追溯到11年前.

用户的电子邮件地址已经粗制滥造加密,通过改变停止抓取工具和垃圾邮件@要么*@*'at'.

我正在尝试创建一个逗号分隔列表来构建我们用户的数据库.

该代码适用于编写文件和循环文件夹,因为如果我将发件人的电子邮件地址写入我当前正在使用电子邮件正文的文件,那么它打印正常.

问题是,Replaces没有改变*at*@.

  1. 首先,为什么不呢?
  2. 我有更好的方式做这个整体吗?
Private Sub Form_Load()

   Dim objOutlook As New Outlook.Application
   Dim objNameSpace As Outlook.NameSpace
   Dim objInbox As MAPIFolder
   Dim objFolder As MAPIFolder
   Dim fldName As String

   fldName = "TEST"

   ' Get the MAPI reference

   Set objNameSpace = objOutlook.GetNamespace("MAPI")

   ' Pick up the Inbox

   Set objInbox = objNameSpace.GetDefaultFolder(olFolderInbox)

   'Loop through the folders under the Inbox
   For Each objFolder In objInbox.Folders
       RecurseFolders fldName, objFolder
   Next …
Run Code Online (Sandbox Code Playgroud)

regex outlook outlook-vba

5
推荐指数
2
解决办法
1225
查看次数

从文件夹中删除重复的Outlook项目

问题

  1. 当我将项目从在线存档移动到pst文件时,Outlook 2016已损坏.
  2. PST文件已被恢复....但许多项目(~7000)重复5次
  3. 有一系列项目类型,标准消息,会议请求等

我尝试了什么,我
看了现有的解决方案和工具,包括:

  1. 重复删除工具 - 除了一次删除10个项目的试用选项之外,其中没有一个是免费的.
  2. 各种代码解决方案包括:
    Jacob Hilderbrand 在Outlook中从Excel 运行
    以删除重复电子邮件的努力 -

我决定采用代码路由,因为它相对简单,并且可以更好地控制重复报告的方式.

我将在下面发布自己的解决方案,因为它可能会帮助其他人

我希望看到其他可能的方法(也许是PowerShell)来解决这个问题,这可能比我的更好.

outlook vba outlook-vba outlook-2016

5
推荐指数
1
解决办法
5414
查看次数

Outlook VBA中的WithEvents对象最终无法引发事件

好吧,看起来有人之前遇到过这个问题,但我没有看到任何进一步的评论或解决方案.请参阅此问题的已接受答案中的编辑.

我的情况是这样的.

我在Win10 x64下使用Exchange电子邮件帐户运行Outlook 2013.我有时会将Outlook运行几天到一周或更长时间而不关闭它.

我想在将新项目添加到"已发送邮件"文件夹时引发事件.这需要在Application ItemSend事件发生之后发生,因为,比方说,我希望在发送消息后删除消息,这是您无法在ItemSend事件处理程序中执行的操作.

所以我有以下代码:

Public WithEvents goSent As Outlook.Items

Private Sub Application_Startup()

    'Establish the global object for the folder we want to monitor.

    Set goSent = Session.GetDefaultFolder(olFolderSentMail).Items

End Sub

Private Sub goSent_ItemAdd(ByVal Item As Object)

    'Do stuff here.

End Sub
Run Code Online (Sandbox Code Playgroud)

一切都工作得很漂亮一天或更长时间,但最终ItemAdd事件处理程序停止射击.如果我进入VBA编辑器并手动运行Application_Startup,则它会再次开始工作.

[编辑:]另外一点信息:Application ItemSend无论Outlook运行多长时间,"内置"事件似乎总是可靠地触发.

[编辑2:]这一次,我在事件停止射击后让事情发生了一天.我打开了VBA编辑器并在Application ItemSend程序中加了一个断点.当它停止时,我查询了这个goSent物体并发现它(a)它仍然存在(而不是存在Nothing),但是(b)它只有昨天在那里的物品,大概是当它变得"不受限制"时已发邮件项目集合.当我Set在立即窗口中提交新语句时,它立即开始再次工作.

[编辑3:]我注意到MSDN文档说ItemAdd类模块中放置自定义对象的事件处理程序 - 比如我的事件.我在ThisOutlookSession中有我的,但我的理解是ThisOutlookSession 一个类模块.这有问题吗?

知道为什么会发生这种情况以及如何处理它?我考虑为每次触发时添加一个事件处理程序Application …

outlook vba outlook-vba

5
推荐指数
1
解决办法
497
查看次数

VBA过滤和发送电子邮件

我正在尝试自动化我们发送给各种堆栈持有者的电子邮件过程.

我想根据公司代码过滤D列,并将电子邮件发送给O列中列出的人员(电子邮件不应重复),还需要包含CC(不重复)

在此输入图像描述

以下是我正在尝试的VBA,但不能包括TO和CC.

Sub Send_Row_Or_Rows_2()

    Dim OutApp As Object
    Dim OutMail As Object
    Dim rng As Range
    Dim Ash As Worksheet
    Dim Cws As Worksheet
    Dim Rcount As Long
    Dim Rnum As Long
    Dim FilterRange As Range
    Dim FieldNum As Integer
    Dim StrBody As String
    Dim StrBody2 As String
    Dim FileToAttach As String
    Dim RngTo As Range

    Set RngTo = Ash.Columns("H").Offset(1, 0).SpecialCells(xlCellTypeVisible)

    StrBody = "<BODY style=font-size:11pt;font-family:Calibri>Dear Approver,<p>Please be informed that below invoices are waiting for your approval in BasWare for …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba email-attachments outlook-vba

5
推荐指数
1
解决办法
1569
查看次数

显示对话框以允许用户在VBA中选择Outlook文件夹

我写了一些Outlook VBA,需要用户选择一个邮件文件夹(来自他们的邮箱或外部PST).

目前,他们必须直接在代码中编辑路径 - 这不是远程用户友好或高效的.

有谁知道如何让对话框出现,允许用户浏览所有可用的文件夹和子文件夹,然后选择一个?

奖励积分如果它可以仅限于邮件文件夹,但它不是必需的.

outlook-vba

4
推荐指数
1
解决办法
9058
查看次数

Outlook 2013使用VBA发送草稿

早上好,

使用Outlook 2010我编译代码以发送保存在给定帐户的草稿文件夹中的所有电子邮件.现在我已经升级到Office 2013我收到一个错误...它是.Send位,它会丢失并显示错误消息:

"此方法不能与内联响应邮件项一起使用."

我确信有一种简单的方法可以发送草稿,但我已经在网上搜索过,但还是无法想象它.

Public Sub SendDrafts()

Dim lDraftItem As Long
Dim myOutlook As Outlook.Application
Dim myNameSpace As Outlook.NameSpace
Dim myFolders As Outlook.Folders
Dim myDraftsFolder As Outlook.MAPIFolder

'Send all items in the "Drafts" folder that have a "To" address filled

'Setup Outlook

Set myOutlook = Outlook.Application
Set myNameSpace = myOutlook.GetNamespace("MAPI")
Set myFolders = myNameSpace.Folders

'Set Draft Folder. This will need modification based on where it's


Set myDraftsFolder = myFolders("accounts@credec.co.uk").Folders("Drafts")

'Loop through all Draft Items

For lDraftItem = myDraftsFolder.Items.count …
Run Code Online (Sandbox Code Playgroud)

outlook-vba

4
推荐指数
1
解决办法
6528
查看次数

SenderEmailAddress属性不包含内部联系人的标准电子邮件地址

背景:

使用Outlook规则触发脚本,我希望收到来自某些高可见性客户端的所有电子邮件后立即打开.

我已成功设置一条规则,当这些客户端向我发送电子邮件时会触发该规则 它看起来像这样:

来自乔布斯和沃兹尼亚克的电子邮件

我已经成功创建了一个脚本,可以打开对电子邮件的回复,具体取决于发送者是谁.它看起来像这样:

Sub OpenEmailImmediately(oEmail As Outlook.MailItem)

    Select Case oEmail.Sender
        Case "Jobs, Steve"
            oEmail.Reply.Display
    End Select

End Sub
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但我已经使用.Sender属性实现了它.

问题:

更愿意使用发件人的电子邮件地址(与我收到的每封电子邮件相关联的唯一值)实现此目的.不幸的是,oEmail.SenderEmailAddress我希望它包含电子邮件地址,仅适用于外部客户端.

在进行故障排除时,我发现我预计oEmail.SenderEmailAddress会有类似于此的值:

steve.jobs@apple.com

对于内部电子邮件,它具有与此类似的值:

/ O = APPLE/CN = RECIPIENTS/CN = JOBSS6738

题:

有没有办法可以使用标准电子邮件地址使这个脚本适用于内部外部?

实施解决方案的代码:

使用下面的Dmitry答案,代码被修改为使用电子邮件地址:

Sub OpenEmailImmediately(oEmail As Outlook.MailItem)

    If oEmail.SenderEmailType = "EX" Then
        Select Case oEmail.Sender.GetExchangeUser().PrimarySmtpAddress
            Case "steve.jobs@apple.com"
                oEmail.Reply.Display
        End Select
    Else
        Select Case oEmail.SenderEmailAddress
            Case "tom.brady@patriots.com"
                oEmail.Reply.Display
        End Select
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

vba outlook-vba outlook-2010

4
推荐指数
1
解决办法
4942
查看次数

我可以将整数项添加到VBA Dictionary byRef

在VBA中创建一个字典,我遇到了一些我很好奇的东西.

当我将Outlook Calendar Item对象添加到字典时ByRef,但当我添加一个灰色的Integer时,它就是ByVal.

我的两个问题是:

  1. 是否可以添加暗淡的整数ByRef
  2. 为什么这两个项目的添加方式不同(我知道一个是对象,一个是基类型,需要更多细节)?

我看了一下:Objects ByRef的VB字典,但它只讨论了对象的情况而不是整数的情况.

以下代码显示了发生的情况:

Sub checkbyref()

    Dim gCal As Items
    Dim dict As New Scripting.Dictionary
    Set dict = New Scripting.Dictionary
    Dim intCheck As Integer

    intCheck = 5
    Set gCal = GetFolderPath("\\GoogleSync\GoogleSyncCal").Items 'gets caledar items based on path

    strMeetingStart = "01/5/2019 12:00 AM"
    strGSearch = "[Start] >= '" & strMeetingStart & "'"

    gCal.Sort "[Start]"
    Set gCal = gCal.Restrict(strGSearch)

    Debug.Print intCheck 'prints "5"
    Debug.Print gCal(1).Start 'prints 1/7/2019 9:30:00 …
Run Code Online (Sandbox Code Playgroud)

outlook vba dictionary outlook-vba

4
推荐指数
1
解决办法
130
查看次数