ACCESS AutoExecとWindowsタスクスケジューラを用いてVBAを定期的に自動実行したいと考えています。
VBAはACCESSクエリの結果をメールで送信させる仕組みになっています。
自動実行にはbatファイルを作成して、Windowsタスクスケジューラでbatファイルを実行させようとしています。
問題:Windowsタスクスケジューラで実行するとタスクは完了するのですが、メール送信されません。マクロを実行したときもコマンドプロンプトからbatファイルを実行したときもメール送信されます。ACCESSの .ldb ファイルは作成されるので起動はしているように思います。
タスクスケジューラではうまく実行されない原因を教えていただけないでしょうか。
下記手順で実行しました。
1.プロシージャ Send()を作成(クエリ結果をメールで送信)
VBA
1Option Compare Database 2Function Send() 3 'Outlookオブジェクトの変数宣言 4 Dim olApp As Object 5 'メールの参照を代入する変数宣言 6 Dim SendMail As Object 7 'メール本文を代入する変数宣言 8 Dim MailSentence As String: MailSentence = "" 9 10 'ADOを用いて、YesterDayの日付データを抽出し、MailSentence変数に代入する 11 Dim cn As New ADODB.Connection 12 Dim rs As New ADODB.Recordset 13 14 'カレントデータベースへの接続 15 Set cn = CurrentProject.Connection 16 17 '---------------------------------------------------------------------------------------------- 18 19 'マスタチェック加工費 20 rs.Open "クエリ1", cn, adOpenKeyset, adLockOptimistic 21 22 'メール本文に記載する 23 MailSentence = MailSentence + "クエリ結果は以下の通りです。" & vbCrLf 24 25 'ループ文でメール本文を作成する 26 Do Until rs.EOF = True Or rs.BOF = True 27 MailSentence = MailSentence & rs!RADU01 & " " & rs!UIDC01 & " " & rs!ITMC01 & rs!SIZC01 & " " & rs!CHNC01 & " " & rs!CLSC01 & " " & rs!TAPC01 & " " & rs!SLDC01 & " " & rs!SFNC01 & " " & rs!SF1C01 & " " & rs!IAGCA0 & " " & vbCrLf 28 rs.MoveNext 29 Loop 30 31 'クエリを閉じ、データベースを閉じる 32 rs.Close 33 '---------------------------------------------------------------------------------------------- 34 cn.Close: Set cn = Nothing 35 36 'Outlookの起動 37 Set olApp = CreateObject("Outlook.Application") 38 39 'メールアイテムを作成する 40 Set SendMail = olApp.CreateItem(0) 41 42 'メールの本文を作成する 43 With SendMail 44 '送信先のメールアドレスを指定する 45 .Recipients.Add("*******.com").Type = 1 46 'メールのタイトル 47 .Subject = "クエリ1" 48 'メールの本文 49 .Body = MailSentence 50 51 '確認用としてOutlookを表示する 52 .Display 53 End With 54 55 SendMail.Send 56 57End Function
3.AutoExecでACCESSを起動すると、マクロも自動的に実行されるので、ACCESSを起動するBATファイル作成
bat
1ECHO OFF 2"C:\TEST\TEST.mdb"
4.定期的に自動実行させたいので、Windowsタスクスケジューラでタスクを作成

回答1件
あなたの回答
tips
プレビュー