質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

1877閲覧

ACCESS AutoExecとWindowsタスクスケジューラを用いてVBAを定期的に自動実行したい

gymgym

総合スコア97

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2022/06/07 01:19

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

2.AutoExecでSend()を実行するマクロ作成
イメージ説明

3.AutoExecでACCESSを起動すると、マクロも自動的に実行されるので、ACCESSを起動するBATファイル作成

bat

1ECHO OFF 2"C:\TEST\TEST.mdb"

4.定期的に自動実行させたいので、Windowsタスクスケジューラでタスクを作成

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2022/06/07 07:51

それはタスクスケジューラへの登録内容の問題ではないでしょうか。 質問内容にタスクスケジューラへの登録内容を追記された方が良いと思います。
guest

回答1

0

ベストアンサー

タスクスケジューラの
全般→セキュリティオプション を確認してみてください

○ユーザがログオンしているかどうかにかかわらず実行する

が選択されていませんか?

タスクスケジューラによるOfficeオートメーションの
バックグラウンド動作は保証されていないようです。

参考
https://support.microsoft.com/ja-jp/topic/office-%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89-%E3%82%AA%E3%83%BC%E3%83%88%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6-48bcfe93-8a89-47f1-0bce-017433ad79e2
※リンク先タイトルには「サーバーサイド オートメーション」とありますが
文中「Windows ワークステーション上で実行されるコードにも適用されます。」
とあります。詳細はリンク先をお読みください。

私が行なった対策は(私の場合はExcelですが)
→ タスクスケジューラのセキュリティオプションで「○ユーザがログオンしている時のみ実行」を選択。かつ、PCを常にログオンの状態にしておく。

というものです。これが正解かは不明ですし、PC常時ログオンはいいのか?とかありますが
何とか動いています。
※外していたらすいません

投稿2022/06/08 06:29

h.horikoshi

総合スコア505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問