2017-05-16 21 views
2

Outlookルールを使用して添付ファイルを保存し、電子メールメッセージ本文にある単語に名前を変更しようとしています。Outlookから添付ファイルの名前を変更して保存する

単語は、コロンの後に3番目の入力行にあります。

私はこのスクリプトを実行するためのルールを設定しています。

Public Sub saveAttachtoNet(itm As Outlook.MailItem) 
Dim objAtt As Outlook.Attachment 
Dim saveFolder As String 
saveFolder = "O:\EUROMKTG\Marketing Analytics Dept\Campaign 
Reporting\Campaign Dashboard\1. Exact Target (Salesforce Mrktg Cloud)" 
For Each objAtt In itm.Attachments 
     objAtt.SaveAsFile saveFolder & "\" & objAtt.DisplayName 
     Set objAtt = Nothing 
Next 
End Sub 

Email Body

+0

メインの電子メールで使用したい「単語」ですか、それとも(複数の)添付された電子メールを含んでいますか? – CLR

+0

メインのメールにあります。私は1つの添付ファイルで1つの電子メールを受信します。私は上記のVBAを使用して添付ファイルを保存したいが、添付ファイルの名前をメインの電子メールに入れられた名前に変更したい。ありがとうございます – CameronR

+0

メール本文のサンプル画像を投稿できますか? – 0m3r

答えて

1

私はこのようにそれを行うだろう:

Public Sub saveAttachtoNet(itm As Outlook.MailItem) 
    Dim objAtt As Outlook.Attachment 
    Dim saveFolder As String 
    saveFolder = "O:\EUROMKTG\Marketing Analytics Dept" & _ 
        "\Campaign Reporting\Campaign Dashboard" & _ 
        "\1. Exact Target (Salesforce Mrktg Cloud)" 

    Dim JobTxtInMail As String 
    JobTxtInMail = "Exported for - JobID:" 
    Dim StrStart As Integer 
    StrStart = InStr(1, _ 
        itm.Body, _ 
        JobTxtInMail, _ 
        vbTextCompare) + Len(JobTxtInMail) + 1 
    Dim JobNum As String 
    JobNum = Trim(Mid(itm.Body, _ 
        StrStart, _ 
        InStr(StrStart + 1, itm.Body, Chr(13)) - StrStart - 1)) 

    For Each objAtt In itm.Attachments 
     objAtt.SaveAsFile saveFolder & "\" & JobNum & "__" & objAtt.DisplayName 
     Set objAtt = Nothing 
    Next objAtt 
End Sub 

+ 1- 1のビットをそれぞれStrStartJobNumに調整する必要がある場合があります。

を目的の出力に合わせて変更してください!

+0

こんにちは、ありがとう - 私はそれが何をしているのか分かりませんし、タイプではなくJobIDを引っ張っています。 RegExについて知っていて、.Pattern = "(エクスポートされたタイプ\ s * [:] + \ s *(\ w *)\ s *)"のようなものを使用していますか? – CameronR

+0

@CameronR: 'JobTxtInMail =" - JobID: "'を 'JobTxtInMail ="にエクスポートしました。エクスポートされたタイプ: "はタイプを抽出します。それは、メールの本文の中に 'JobTxtInMail'という文字列を見つけ出し、抽出したい部分の開始(' StrStart')を定義し、その部分( 'JobNum')を抽出する行の終わりを見つけます。ええ、確かに、あなたは正規表現でそれをすることができますが、私はそれが重い砲兵であると言うでしょう。 Regexで試してみたいのなら、[this](http://stackoverflow.com/a/44018269/4628637)または[this](http://stackoverflow.com/a/43896112/4628637)を見てください! ;) – R3uK

1

これは、いくつかの例の電子メールを見ずにいますが、あなたは「グラブ」の単語をしたいFor Each objAtt..ループを起動する前に行うことが難しいのです。私はitm.Bodyを探しています。 Splitを使用してChr(13) - キャリッジリターンでこれを分割すると、3つ目の '占有'セグメントを選択するだけです。あなたは、3行目は、有効なファイル名などが含まれていますが、それを行う可能性がありますどのようにテストされていない考え方は以下を参照しようとしていることを自信を必要とする:

Public Sub saveAttachtoNet(itm As Outlook.MailItem) 
    Dim objAtt As Outlook.Attachment 
    Dim saveFolder As String 
    Dim bodystring, sgmnt As String 
    Dim sgmntcounter As Integer 
    saveFolder = "O:\EUROMKTG\Marketing Analytics Dept\Campaign " _ 
    & "Reporting\Campaign Dashboard\1. Exact Target (Salesforce Mrktg Cloud)" 

    bodystring = itm.Body 
    bodysegments = Split(bodystring, Chr(13)) 

    For Each sgmnt In bodysegments 
     If sgmnt <> "" Then sgmntcounter = sgmntcounter + 1 
     If sgmntcounter = 3 Then Exit For 
    Next 

    For Each objAtt In itm.Attachments 
     objAtt.SaveAsFile saveFolder & "\" & sgmnt 
     Set objAtt = Nothing 
    Next 
End Sub 
関連する問題