たとえば残業は16時までにメールで申請、とかってあるよね。
残業するときにそのメールを書くってだけで面倒で嫌になるから、
excelに記入した内容で申請メールを自動送信するマクロ&VBScriptを書いた。
要BSMTP.DLL&BSENDM.EXE。WINDOWS\system32ディレクトリに配置して。
BASP21 DLL
こんなexcelを作る。ここではOvertime.xlsとする。
VBA
Private Declare Function SendMailEx Lib "bsmtp" _ (szLogfile As String, szServer As String, szTo As String, _ szFrom As String, szSubject As String, szBody As String, szFile As String) As String Public Sub sendOvertimeMail() Dim today As String today = Format(Date, "m月d日") Dim dateCell As Variant Set dateCell = Columns("A:A").Find(What:=today, LookIn:=xlValues, LookAt:=xlWhole) If dateCell Is Nothing Then MsgBox today & "のセルがありません" Exit Sub End If Dim sb As Object Set sb = CreateObject("System.Text.StringBuilder") Dim body As String sb.Append_3 ("お疲れさまです。") sb.Append_3 (vbLf) sb.Append_3 ("本日") sb.Append_3 (today) sb.Append_3 ("の残業予定を報告いたします。") sb.Append_3 (vbLf) sb.Append_3 (vbLf) sb.Append_3 (vbLf) sb.Append_3 (" ") sb.Append_3 (Range("B1").Value) sb.Append_3 (" ") sb.Append_3 (Format(Range("B" & dateCell.Row).Value, "hh:mm")) sb.Append_3 (vbLf) sb.Append_3 (vbLf) sb.Append_3 (vbLf) sb.Append_3 ("以上です。") sb.Append_3 (vbLf) sb.Append_3 ("どうぞよろしくお願いいたします。") sb.Append_3 (vbLf) sb.Append_3 ("※このメールはタイマーにより自動送信しています。") body = sb.ToString Dim errorMessage As String errorMessage = SendMailEx( _ "c:\log.txt", _ "SMTPサーバー", _ "Toアドレス", _ "Fromアドレス" & vbTab & "SMTPユーザー名:パスワード", _ today & "の残業予定", _ body, _ "") If errorMessage <> "" Then MsgBox "メール送信でエラーが発生しました" & vbLf & errorMessage End If End Sub
VBSからは標準モジュールにあるマクロしか呼び出せないので、
標準モジュールに関数を記述した。
Public Sub proceed() ThisWorkbook.sendOvertimeMail End Sub
VBScript
Dim xlApp Set xlApp = CreateObject("Excel.Application") xlApp.Visible = FALSE Dim myBook Set myBook = xlApp.Workbooks.Open("C:\Overtime.xls") xlApp.Run myBook.name & "!Module1.proceed" Wscript.Sleep 2000 '2秒 xlApp.Quit Set xlApp = Nothing
このVBSをコントロールパネル→タスクで登録しておけば、定刻になるとメールを自動送信してくれる。