たまには、Excelマクロでのコーディングの話を。
以前、「メール配信システムが障害続きなのでメール配信システムを変えたくて仕方がない」ということをブログで書いた。
http://www.exvba.com/blog/?p=1891
で、新規にメール配信システムを導入したのだが。
ついでに、Excelで作った顧客データベースに新規に受講生が登録された段階で、ネット上にあるメール配信システムに自動的にその受講生の方へのメール配信が開始されるような仕組みを作った。
以下は、そのサンプルコード。
小川が自分でネット上で情報を探した際、サンプルコードと関連リンクが全部書かれているページが見つからなくて多少手こずったので、あとで同じようなことをする人のために書いておく。
Sub PostForm(sP1 As String, sP2 As String, sP3 As String, sP4 As String, url As String)
‘指定されたURLにPostを行う
‘文字コードはSHIFT-JIS。というか、システムのデフォルトがSHIFT-JISという想定で作成
‘その場合、パラメータは Byte 型配列にして渡す必要あり。
‘参考URL:
‘ http://office.microsoft.com/ja-jp/access/HA012289151041.aspx
‘ http://homepage1.nifty.com/MADIA/vb/vb_bbs2/200501/200501_05010059.html
Dim xmlhttp As Object
Set xmlhttp = CreateObject("msxml2.xmlhttp")
Dim sParam As String
Dim sPm1 As String
Dim sPm2 As String
Dim sPm3 As String
Dim sPm4 As String
sPm1 = "&myparam1=" & sP1
sPm2 = "&myparam2=" & sP2
sPm3 = "&myparam3=" & sP3
sPm4 = "&myparam4=" & sP4
sParam = sParam & sPm1 & sPm2 & sPm3 & sPm4
xmlhttp.Open "POST", url, False
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
Dim bPmary() As Byte
bPmary = StrConv(sParam, vbFromUnicode) ‘ここで、文字列をByte型の文字列に変換
xmlhttp.send (bPmary)
Dim sCode As String
sCode = xmlhttp.Status
If sCode <> 200 Then ‘サーバからのレスポンスコードをチェック
MsgBox "サーバから200以外のレスポンスコードが返りました" & vbNewLine & sCode
End If
Dim sHTML As String
sHTML = xmlhttp.responsebody
sHTML = StrConv(sHTML, vbUnicode, 1041)
Debug.Print sHTML ‘戻ってきたHTMLをそのまま表示
End Sub
Postに成功しているHTMLフォームのソースを調べて、上に紹介したコードのパラメータだけ変更すればそれなりに動く物が作れると思う。
サンプル内で記載したリンクの2つめのものにも書かれているが、SHIFT-JISでsendするには、渡す引数は、Byte型でなければならないよう。
それで、1つめのリンク microsoft のサイトでサンプルコードを見つけて解決した。