0

我需要一个解决方案,将 VBA 脚本添加到 Outlook 中的规则,该规则在电子邮件主题行中的短语“was”之前搜索单词,然后使用该单词将附件(excel 文件)保存在指定文件夹中。

我熟悉 InStr() 方法,但无论出于何种原因,我无法弄清楚如何使用当前代码来处理它。有人有想法么?

这是我在添加新行之前的当前工作脚本:

Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim saveFolder2 As String
Dim attname As String
Dim fso As FileSystemObject
Dim stream As TextStream


saveFolder = "C:\Users\testuser\Desktop\Files\Reports"
saveFolder2 = "\\SERVER\C\Users\Service\Documents"
    For Each objAtt In itm.Attachments
        objAtt.SaveAsFile saveFolder & "\" & objAtt.DisplayName
        attname = objAtt.DisplayName
        Call updatelog(attname)
        objAtt.SaveAsFile saveFolder2 & "\" & objAtt.DisplayName
        Call updatelog(attname)
        Set objAtt = Nothing
    Next

谢谢

4

1 回答 1

2

这是一个通用函数,它将返回触发词之前的词。

Function WordBeforeTrigger(sInput As String, sTrigger As String) As String

    Dim vaSplit As Variant
    Dim i As Long
    Dim sReturn As String

    vaSplit = Split(sInput, Space(1))

    For i = LBound(vaSplit) + 1 To UBound(vaSplit)
        If vaSplit(i) = sTrigger Then
            sReturn = vaSplit(i - 1)
            Exit For
        End If
    Next i

    WordBeforeTrigger = sReturn

End Function

这是在立即窗口中使用它的方法

?wordbeforetrigger("Report1 2012 was run on 7/11/2013 at 11:58:35pm","was")
2012
?wordbeforetrigger("I was home","was")
I
?wordbeforetrigger("","was")

?wordbeforetrigger("doesn't contain","was")

那些空行是空字符串。您需要编写代码来说明何时找不到单词并返回空字符串。如果 Len(sReturn)=0 或类似的东西,您可以修改函数以返回 sInput。

看来您想传入 DisplayName 和“was”,它将返回该值。您可以将其存储在字符串变量中并将其用作附件名称。

使用 Instr 没有任何问题,但您会注意到我没有。我更喜欢使用拆分并导航结果数组而不是 Instr。

于 2013-07-12T21:58:53.683 回答