2013-07-12 41 views
0

我需要一個解決方案將VBA腳本添加到Outlook中的一個規則中,該規則在電子郵件主題行中搜索短語「was」之前的單詞,然後保存附件(excel文件)在指定文件夾中使用該詞。將附件保存爲文件名主題行的一部分的VBA腳本

我熟悉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 

感謝

+0

給出您分析的電子郵件主題的示例... –

+0

它有所不同。他的主題行的一個例子可能是:「Report1 2012在2013年7月11日下午11:58:35運行」 我想在「was」之前提取「2012」。它可以是2010-2013年的任何一年,所以我試圖讓這行代碼讀取並將其插入保存的附件的文件名中。 – Sev09

回答

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沒有任何問題,但你會注意到我沒有。我更喜歡使用Split並導航結果數組而不是Instr。

+0

謝謝!這工作完美。 – Sev09

相關問題