2016-11-29 9 views
0

私は非常に特有の問題があります。私はそれがthis questionの複製であるかもしれないと信じていますが、決して答えられませんでした。私は特定の電子メールを受け入れるときに実行されるマクロを持っています。電子メールには、「承認済み」または「却下済み」の投票オプションが付いています。投票オプションの受信者が自分の選択に応じて応答すると、受信した「選択」電子メールには本文がありません。体を保持する方法はありますか?VotingOptionsカスタムボディの応答返信

私はこれまでのところ、これを試してみた:

With objMsg 
    .To = strEmail 
    .HTMLBody = Item.HTMLBody 
    .Subject = "Is This Approved?" 
    .VotingOptions = "Approved;Rejected" 
    .VotingResponse = "Yes" 
    .Attachments.Add Item 
    .Display 
    .Send 
End With 

私はこれが唯一の反応初期の電子メールをもたらすとされていないと考えているが。私はMailItem Objectも見ましたが、.VotingOptions.VotingResponse以外の投票のオプションは見当たりませんでした。私はこの目標を達成するのに役立つことができなかった何かがありますか?

さらに、応答に本文を含めることができる限り、投票ボタン以外のアイデア(タスクやそのようなものなど)を公開できます。

アイデアをいただければ幸いです。

+0

返信の本文は、受信者と送信前に返信を編集するかどうかによって異なります。したがって、私には2つの選択肢があります。受信者は、あなたに返すようにメッセージを変更するためにVBAバックエンドが必要です(達成される可能性は低いです)か、またはソート(または日付/時刻)のハッシュコードをサブジェクトに追加して、どの電子メールそれは投票が受信されたときを指す。 – Tragamor

+0

http://stackoverflow.com/questions/7710191/getting-messageid-from-email-in-outlook-vba-2003 – Tragamor

答えて

1

上記のコメントで述べたように、私は、メッセージスレッドの返信を追跡できる唯一の方法は、問題に小さなハッシュを追加することだと思います。

Sub TestHash() 
    Dim lDate As Date: lDate = Now 
    Debug.Print DateTimeHash(lDate) 
    Debug.Print DateTimeUnhash(DateTimeHash(lDate)) 
End Sub 

Function DateTimeHash(ByRef lDate As Date) As String 
    Dim Secs As String: Secs = Encode64(60 * (60 * Hour(lDate) + Minute(lDate)) + Second(lDate)) 
    DateTimeHash = "#" & Encode64(DateValue(lDate)) & String(3 - Len(Secs), "0") & Secs & "#" 
End Function 

Function DateTimeUnhash(ByRef Hash As String) As Date 
    Hash = Replace(Hash, "#", "") 
    Dim Days As Long: Days = Decode64(Left(Hash, Len(Hash) - 3)) 
    Dim Secs As Long: Secs = Decode64(Right(Hash, 3)) 
    DateTimeUnhash = DateAdd("d", Days, "0") + DateAdd("s", Secs, "0") 
End Function 

Function Encode64(ByRef Value As Long) As String 
    'Will Convert any Positive Integer to a Base64 String 
    Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/" 

    Encode64 = IIf(Value > 0, vbNullString, "0") 
    If Encode64 = "0" Then Exit Function 
    Do While Value <> 0 
     Encode64 = Mid(Base64, Value Mod 64 + 1, 1) & Encode64 
     Value = Value \ 64 
    Loop 
End Function 

Function Decode64(ByRef Value As String) As Long 
    'Will Convert any Base64 String to a Positive Integer 
    Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/" 

    Decode64 = IIf(Value = "", -1, 0) 
    Dim i As Long: For i = 1 To Len(Value) 
     If Decode64 = -1 Then Exit Function ' Error detected with Value string 
     Decode64 = Decode64 * 64 
     Decode64 = IIf(InStr(Base64, Mid(Value, i, 1)) > 0, _ 
      Decode64 + InStr(Base64, Mid(Value, i, 1)) - 1, -1) 
    Next i 
End Function 
:以下代わり可逆ベース64のハッシュを使用して被験者

Sub TestHash() 
    Dim lDate As Date: lDate = Now 
    MsgBox DateTimeHash(lDate) 
End Sub 

Function DateTimeHash(lDate As Date) As String 
    DateTimeHash = "#" & fBase36Encode(DateValue(lDate)) & _ 
    fBase36Encode(60 * (60 * Hour(lDate) + Minute(lDate)) + Second(lDate)) & "#" 
End Function 

Function fBase36Encode(ByRef lngNumToConvert As Long) As String 
    'Will Convert any Positive Integer to a Base36 String 
    fBase36Encode = "0" 
    If lngNumToConvert = 0 Then Exit Function 

    Dim strAlphabet As String: strAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
    fBase36Encode = vbNullString 
    Do While lngNumToConvert <> 0 
     fBase36Encode = Mid(strAlphabet, lngNumToConvert Mod 36 + 1, 1) & fBase36Encode 
     lngNumToConvert = lngNumToConvert \ 36 
    Loop 
End Function 

* EDIT *

にプレフィックスとして追加する日付と時刻に基づいてハッシュを生成するためのいくつかのコードであります

+0

非常に発明的。実際には、これほど独創的なので、私はその問題を解決するためにそのことをやってしまった。他の人が私のために持っているかもしれない他の選択肢やアイデアがあるかどうかを知るために質問を開いたままにしたいと思っていました。しかし、それは私がこれを回避するために使用したものなので、素晴らしいアイデアです! – SalvadorVayshun

+0

この拡張は、ハッシュが可逆である場合、ハッシュをチェックし、送信されたアイテムを元の電子メール(ハッシュタイムスタンプに基づいて)で検索し、送信された電子メールをコピーするようにnewmailイベントを設定できます本文を返信本文に挿入します。したがって、元の質問の送金内容は実際に完了しています。 – Tragamor

+0

私は同意します。これは問題の要件を完全に満たし、手元の問題を回避するために使用できます。私は週の終わりまで質問を開いたままにしておきます。誰かが本当に情報を身に渡す方法を期待しています。解決するのは簡単な問題のようですが、それを解決する直接的な方法はありません。典型的なマイクロソフト – SalvadorVayshun

関連する問題