2014/01/21

Outlook 注文メール受信時に、注文管理表を自動更新したい



こんにちは!いつも何かしらの管理表を管理していて、管理しているのか管理されているのかがわからなくなっているtknriaです!


管理表の管理といっても、更新よろしくっていうメールを受けたときに、その内容を反映して更新保存するっていうだけですけどね。

でもこれが非常に面倒!

管理表に管理されてる!


ってことで、以前、メール受信時に自動処理するという記事を書きましたが、

それを応用して、注文メールを受信したときに、注文管理表を自動で更新してみます。



■ 管理表を自動更新!


注文管理表は、ここでは、csvファイルを想定しています。




1行目に「注文日,型番,数量,ユーザー」と入力して保存し、そのフルパスを変数orderに格納します。


また、処理開始のトリガとなるメールは、以下のフォーマットとしています。




こんな設定だと、コードはこんな感じでいけます。


'----- 以下、ソース -----

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim objItem As Variant
    Set objItem = Session.GetItemFromID(EntryIDCollection)
    If TypeName(objItem) = "MailItem" Then
        ' 注文管理表を更新
        Call OrderEntry(objItem)
    End If
End Sub


Public Sub OrderEntry(ByVal objMail As MailItem)
    Const order = "C:\Users\○○"     ' 管理表のフルパス
    Const order_sub = "注文メール"      ' 注文メールかどうかを判別する件名
    Dim str_start As Integer
    Dim str_end As Integer
    Dim today As String
    Dim kataban As String
    Dim suuryou As Integer
    Dim user As String
    ' ----------------------------------
    ' 注文メールフォーマット
    ' ----------------------------------
    ' Subject   :注文メール
    ' Body      :型番:AA
    '               数量:12
    '               ユーザー:hoge
   
    If objMail.Subject = order_sub Then
        ' 必要な情報を抜き出す
        today = Format(Date, "yyyy/mm/dd")
       
        str_start = InStr(objMail.Body, "型番:") + Len("型番:")
        str_end = InStr(str_start, objMail.Body, vbCrLf)
        kataban = Trim(Mid(objMail.Body, str_start, str_end - str_start))
       
        str_start = InStr(objMail.Body, "数量:") + Len("数量:")
        str_end = InStr(str_start, objMail.Body, vbCrLf)
        suuryou = CInt(Trim(Mid(objMail.Body, str_start, str_end - str_start)))
       
        str_start = InStr(objMail.Body, "ユーザー:") + Len("ユーザー:")
        str_end = InStr(str_start, objMail.Body, vbCrLf)
        user = Trim(Mid(objMail.Body, str_start, str_end - str_start))
   
        ' orderファイルを開く
        Open order For Append As #1
        Write #1, today, kataban, suuryou, user
        Close #1
    Else
    End If
End Sub

'----- 以上、ソース -----



ちなみに、「注文メール」がフォーマット通りでない場合はエラーで止まってしまうので、そこのケアは必要です。



■ 億劫なあとがき


これで、メールをトリガにしたファイルの自動更新はおっけー!

単純に次々追加するわけではないのでちょっと複雑になりますが、スケジュール更新なんかもできるはずですね。

充実した自動更新ライフを☆