2016-04-06 9 views
0

複数のPDF添付ファイルを含む完成した仕事用電子メールを送信しようとしていますが、PDFファイルのみを受信者に送信し、転送される。非PDF添付ファイルなしで選択した電子メールを転送する

P.S. pdfs、excels、imagesの組み合わせで1つ以上の添付ファイルがある場合がありますが、pdfsのみを転送する必要があります。私はその部分をコード化する方法を見つけることができません。私の既存のコードの下を参照してください。

 Sub Send2Recipient() 

     ' Send Completed Message to Recipient 

     On Error Resume Next 

     Dim oApp As Outlook.Application 
     Dim objFolder As Outlook.MAPIFolder 
     Set oApp = New Outlook.Application 
     Set objNS = Application.GetNamespace("MAPI") 
     Set objInbox = objNS.GetDefaultFolder(olFolderInbox) 
     Set objFolder = objInbox.Folders("Helpdesk") 
     Dim oEmail As Outlook.MailItem 
     Dim strFile As String 
     Dim sFileType As String 

     'Require that this procedure be called only when a message is selected 
     If Application.ActiveExplorer.Selection.Count = 0 Then 
      Exit Sub 
     End If 

     For Each objItem In Application.ActiveExplorer.Selection 
      If objFolder.DefaultItemType = olMailItem Then 
       If objItem.Class = olMail Then 
        Response = MsgBox("Forward message (" + item.Subject + ") to Appended Subject") 

        Set myforward = objItem.Forward 
        myforward.Body = "Scan Only" 
        myforward.Subject = "Scan Only" 
        myforward.Recipients.Add "[email protected]" 
        myforward.Display 
       End If 
      End If 
     Next 

     End Sub 

更新VBAスクリプト

 Sub Send2New() 

     ' Send Completed Message to Accenture 

     On Error Resume Next 

     Dim oApp As Outlook.Application 
     Dim objFolder As Outlook.MAPIFolder 
     Set oApp = New Outlook.Application 
     Set objNS = Application.GetNamespace("MAPI") 
     Set objInbox = objNS.GetDefaultFolder(olFolderInbox) 
     'Set objFolder = objInbox.Folders("Helpdesk") 
     Dim oEmail As Outlook.MailItem 
     Dim strFile As String 
     Dim sFileType As String 
     Dim bk, fg As Integer 

     'Require that this procedure be called only when a message is selected 
     If Application.ActiveExplorer.Selection.Count = 0 Then 
      Exit Sub 
     End If 

     For Each objItem In Application.ActiveExplorer.Selection 
      If objFolder.DefaultItemType = olMailItem Then 
       If objItem.Class = olmail Then 
        Response = MsgBox("Forward message (" + Item.Subject + ") to Appended Subject") 

        Set myforward = objItem.Forward 
        myforward.Body = "Scan Only" 
        myforward.Subject = "Scan Only" 
        myforward.Recipients.Add "[email protected]" 
        myforward.Display 

        bk = myforward.Attachments.Count 
        fg = 1 
        For i = 1 To bk 
         If InStr(LCase(myforward.Attachments(fg).FileName), ".pdf") = 0 Then 
          myforward.Attachments(fg).Delete 
          Else: fg = fg + 1 
         End If 
        Next i 

        End If 
      End If 
     Next 

     End Sub 
+0

あなたは以前の質問を削除したようです。コメントでは、電子メールへの添付ファイルを特定する方法を示した以前の回答にリンクしました。必要に応じて私はあなたにリンクを再度与えることができます。添付ファイルをあるメールから別のメールに移動することは可能だとは思いません。あなたは古い電子メールから添付ファイルを(ディスクに)保存し、新しい電子メールに添付することができます。また、古い電子メールを複製し、不要な添付ファイルを削除し、送信者、受信者、および本文を置き換えることもできます。私は一度にすべてのことをやったことがないと告白しますが、個々のステップは難しくありません。 –

+0

ありがとうございました。トニーの情報をありがとうございました。他の質問を削除しました。これはOutlookのレポートに関連していましたので、既存のメールを固定メールアドレスに転送し、pdf添付ファイル他の添付ファイルは、転送されるべきではありません。 –

答えて

0

私はあなたのための2つのマクロを作成しました。

最初のInvestigateは、添付ファイルに関する情報をイミディエイトウィンドウに出力します。添付ファイルには4種類あります。 "標準"添付ファイルは "By Value"タイプのものです。私はOLEの添付ファイルを見たことがないし、そのような添付ファイルが何であるか分からない。私は他のタイプを見たことがありますが、長年はありませんでした。

第2のForwardEmailsWithoutNonPdfAttachments()は、求めている機能を示しています。自分のGmailアカウントの添付ファイルを含む電子メールを自分のOutlookアカウントに送信し、そのマクロを使用してPDF以外の添付ファイルを削除して送り返しました。これらの添付ファイルはすべて「By Value」添付ファイルでした。あなたが最初のマクロの理由である別の種類の添付ファイルで電子メールを転送しようとした場合、どうなるかわかりません。このマクロはそれほどエレガントではありませんが、目的を達成するために必要な技術を示しています。

Option Explicit 
Public Sub Investigate() 

    Dim AttachType As String 
    Dim Exp As Outlook.Explorer 
    Dim InxAttach As Long 
    Dim ItemCrnt As MailItem 
    Dim NumAttach As Long 
    Dim NumSelected As Long 

    Set Exp = Outlook.Application.ActiveExplorer 

    NumSelected = Exp.Selection.Count 

    If NumSelected = 0 Then 
    Debug.Print "No emails selected" 
    Else 
    For Each ItemCrnt In Exp.Selection 
     With ItemCrnt 
     Debug.Print "From: " & .SenderName & " | Subject: " & .Subject 
     For InxAttach = 1 To .Attachments.Count 
      ' There are four types of attachment: 
      ' * olByValue  1 
      ' * olByReference 4 
      ' * olEmbeddedItem 5 
      ' * olOLE   6 
      With .Attachments(InxAttach) 
      Select Case .Type 
       Case olByValue 
       AttachType = "Val" 
       Case olEmbeddeditem 
       AttachType = "Ebd" 
       Case olByReference 
       AttachType = "Ref" 
       Case olOLE 
       AttachType = "OLE" 
       Case Else 
       AttachType = "Unk" 
      End Select 
      Debug.Print AttachType & " " & .FileName & " | " & .DisplayName 
      End With ' .Attachments(InxAttach) 
     Next ' ItemCrnt 
     End With 
    Next 
    End If 

End Sub 
Sub ForwardEmailsWithoutNonPdfAttachments() 

    Dim AttachType As String 
    Dim Exp As Outlook.Explorer 
    Dim InxAttach As Long 
    Dim ItemCopy As MailItem 
    Dim ItemOrig As MailItem 
    Dim NumAttach As Long 
    Dim NumSelected As Long 

    Set Exp = Outlook.Application.ActiveExplorer 

    NumSelected = Exp.Selection.Count 

    If NumSelected = 0 Then 
    Debug.Print "No emails selected" 
    Else 
    For Each ItemOrig In Exp.Selection 

     Set ItemCopy = ItemOrig.Copy 
     With ItemCopy 
     .Subject = "FW: " & .Subject 
     ' Delete all original recipients 
     Do While .Recipients.Count > 0 
      .Recipients.Remove (1) 
     Loop 
     ' Add new recipient 
     .Recipients.Add "[email protected]" 
     If .Attachments.Count > 0 Then 
      For InxAttach = .Attachments.Count To 1 Step -1 
      With .Attachments(InxAttach) 
       ' This will stop the macro if an attachment is not a regular attachment 
       Debug.Assert .Type = olByValue 
       If LCase(Right$(.FileName, 4)) <> ".pdf" Then 
       .Delete 
       End If 
      End With ' .Attachments(InxAttach) 
      Next InxAttach 
     End If 
     .Send 
     End With ' ItemCopy 
     Set ItemCopy = Nothing 
    Next ItemOrig 
    End If 

End Sub 
+0

こんにちはトニー、私は上記のマクロを試した、彼らは完璧に動作し、私は、要件ごとに本文とのためのいくつかの変更を加えた:)、ただ1つの質問は、それは、 Great HelpありがとうTony :) –

+0

@PawanTejani私の標準的なテクニックは、処理された電子メールを別のフォルダに移動することです。私は通常Explorerを使用しません。私は通常、興味のある電子メールをInboxで検索し、処理してアーカイブフォルダに移動します。代わりに、送信済みアイテムに転送された電子メールのコピーが必要です。 –

+0

私は状況を説明しましょう、これらの電子メールは250GBの共有メールボックスを使用していますので、コピーをたくさん作成するのを避けたいのですが、他のユーザーと同じメールを転送することをお勧めします。 –

関連する問題