こんにちは!いつも何かしらの管理表を管理していて、管理しているのか管理されているのかがわからなくなっている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
'----- 以上、ソース -----
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
'----- 以上、ソース -----
ちなみに、「注文メール」がフォーマット通りでない場合はエラーで止まってしまうので、そこのケアは必要です。
■ 億劫なあとがき
これで、メールをトリガにしたファイルの自動更新はおっけー!
単純に次々追加するわけではないのでちょっと複雑になりますが、スケジュール更新なんかもできるはずですね。
充実した自動更新ライフを☆