2017-09-07 31 views
0

以下のOutlook VBAでマクロを作成して、挨拶に追加された送信者のファーストネームを使用して本文にテキストを追加し、私が望むフォント。個々の受信者名(元の電子メールの送信者名)を持つOutlookの返信

私が助けが必要なのは、マクロが送信者の名前をすべて取得して、電子メールの本文のどこかに配置できる値を割り当てることです。それができないなら、私は挨拶にすべての名前を入れるだけで済むが、名前を動かすことができる方がはるかに好ましい。

例:; は現在、このマクロは唯一名1は、(「親愛なる名1を、」与える)引っ張ってくるが、 、私は非常に少なくとも、「親愛なる名1とName2は、」に取得したいと思いName2は
送信者が名1でした。 ベストはName1を挨拶にすることができ、次にName2はテキストの本文に配置されます。

私はこれまで私が自分でできると思っていますが、今は専門家に助けを求めています!ありがとうございました!!スペースがある場合

strGreetName = Left$(oMail.SenderName, InStr(1, oMail.SenderName, " ") - 1) 
lastName = right(oMail.SenderName, len(oMail.SenderName) - InStr(1, oMail.SenderName, " ")) 

:このコード内のフォーマットを使用して

sndrName = oMail.SenderName 
lastName = right(sndrName, len(sndrName) - InStr(1, sndrName, " ")) 

のような文字列の右側を取得し、文字列「姓」を考える

Sub AutoAddGreetingtoReply() 
Dim oMail As MailItem 
Dim oReply As MailItem 
Dim GreetTime As String 
Dim strbody As String 
Dim SigString As String 
Dim Signature As String 
Dim R As Outlook.Recipient 
Dim strGreetName As String 

Select Case Application.ActiveWindow.Class 
     Case olInspector 
      Set oMail = ActiveInspector.CurrentItem 
     Case olExplorer 
      Set oMail = ActiveExplorer.Selection.Item(1) 
End Select 




strbody = "<H3><B></B></H3>" & _ 
"<br><br><B></B>" & _ 
      "Please visit this website to view your transactions.<br>" & _ 
      "Let me know if you have problems.<br>" & _ 
      "<A HREF=""http://www.google.com"">Questions</A>" & _ 
      "<br><br>Thank you" 

      SigString = Environ("appdata") & _ 
      "\Microsoft\Signatures\90 Days.htm" 

On Error Resume Next 

If Dir(SigString) <> "" Then 
      strGreetName = Left$(oMail.SenderName, InStr(1, oMail.SenderName, " ") - 1) 
End If 

If Dir(SigString) <> "" Then 
    Signature = GetBoiler(SigString) 
Else 
    Signature = "" 
End If 

Set oReply = oMail.ReplyAll 

With oReply 
    .CC = "" 
    .HTMLBody = "<Font Face=calibri>Dear " & strGreetName & "," & R1 & strbody & "<br>" & Signature 
    .Display 
End With 

End Sub 
+0

On Error Resume Nextは、学習を妨げます。 http://www.cpearson.com/Excel/ErrorHandling.htm – niton

答えて

0

テキストInStrは位置を返します。 https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/instr-function

オリジナルメールには送信者が1人あります。 ReplyAllには、元のメール送信者を含む受信者があります。

Option Explicit 

Private Sub ReplyFirstNames() 

Dim oMail As mailitem 
Dim oReply As mailitem 

Dim strGreetName As String 
Dim strGreetNameAll As String 

Dim i As Long 

Select Case Application.ActiveWindow.Class 
    Case olInspector 
     Set oMail = ActiveInspector.currentItem 
    Case olExplorer 
     Set oMail = ActiveExplorer.Selection.Item(1) 
End Select 

Set oReply = oMail.ReplyAll 

With oReply 

    Debug.Print "The reply all recipients are:" 

    For i = 1 To .Recipients.count 
     Debug.Print .Recipients(i) 

     ' Given the format First Last 
     strGreetName = Left(.Recipients(i), InStr(1, .Recipients(i), " ") - 1) 
     strGreetNameAll = strGreetNameAll & strGreetName & ", " 
    Next i 

    Debug.Print strGreetNameAll 
    ' remove extra comma and space from end 
    strGreetNameAll = Left(strGreetNameAll, Len(strGreetNameAll) - 2) 
    Debug.Print strGreetNameAll 

    .htmlbody = "<Font Face=calibri>" & strGreetNameAll & .htmlbody 
    .Display 

End With 

End Sub 
+0

こんにちは、ありがとう、私を許してください。私はあなたが言ったことをどうやって行うのか分かりません。私はそのコードを追加しようとし、項目を文字列として淡色表示しましたが、オブジェクト変数にエラーがありました。私はこのすべてを学んでいるので、私はあなたに私が与えることができる助けと指導に感謝します、ありがとう! InStrは何をしますか?ありがとう! – learningthisstuff

+0

素晴らしい、もう一度Niton、私は働くことを得た(それ自身の成果は、私を信頼してください!)。それは人の姓を引っ張りますが、私がやっているのは送信者の行にあった第二人の名前を得ることです。だから私は返信を押すと、それは両方の名前を引っ張り、挨拶に挿入されます。だからそれは親愛なるSender1とSender2です。 2番目の送信者を特定してコードを適用する方法を知っていますか?私はそれがoMail.SenderName2のようなものになると思っていましたが、Outlookがどのように指定を処理しているのかわかりません。もう一度、ありがとう! – learningthisstuff

+0

すごい、すばらしい、名前をすべて手に入れることができた、どうやってやったの? .recipientsの作品かstrgreetnameallの作品かな?私は、これらの2つの部分を一緒に動作させるためにスタブマクロを実行しようとしましたが、これまで行っていません。これらの2つを一緒に使うことができる方法はありますか?そのような名前を取り、それを自分のコードに追加して、身体の前の挨拶に追加します。あなたは天才です! – learningthisstuff

関連する問題