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

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

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

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

Access

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

解決済

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

gymgym
gymgym

総合スコア95

VBA

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

Access

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

1回答

0評価

0クリップ

247閲覧

投稿2022/06/07 01:19

ACCESS AutoExecとWindowsタスクスケジューラを用いてVBAを定期的に自動実行したいと考えています。
VBAはACCESSクエリの結果をメールで送信させる仕組みになっています。
自動実行にはbatファイルを作成して、Windowsタスクスケジューラでbatファイルを実行させようとしています。

問題:Windowsタスクスケジューラで実行するとタスクは完了するのですが、メール送信されません。マクロを実行したときもコマンドプロンプトからbatファイルを実行したときもメール送信されます。ACCESSの .ldb ファイルは作成されるので起動はしているように思います。

タスクスケジューラではうまく実行されない原因を教えていただけないでしょうか。

下記手順で実行しました。
1.プロシージャ Send()を作成(クエリ結果をメールで送信)

VBA

Option Compare Database Function Send()   'Outlookオブジェクトの変数宣言 Dim olApp As Object 'メールの参照を代入する変数宣言 Dim SendMail As Object 'メール本文を代入する変数宣言 Dim MailSentence As String: MailSentence = "" 'ADOを用いて、YesterDayの日付データを抽出し、MailSentence変数に代入する Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset 'カレントデータベースへの接続 Set cn = CurrentProject.Connection '---------------------------------------------------------------------------------------------- 'マスタチェック加工費 rs.Open "クエリ1", cn, adOpenKeyset, adLockOptimistic 'メール本文に記載する MailSentence = MailSentence + "クエリ結果は以下の通りです。" & vbCrLf 'ループ文でメール本文を作成する Do Until rs.EOF = True Or rs.BOF = True 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 rs.MoveNext Loop 'クエリを閉じ、データベースを閉じる rs.Close '---------------------------------------------------------------------------------------------- cn.Close: Set cn = Nothing 'Outlookの起動 Set olApp = CreateObject("Outlook.Application") 'メールアイテムを作成する Set SendMail = olApp.CreateItem(0) 'メールの本文を作成する With SendMail '送信先のメールアドレスを指定する .Recipients.Add("*******.com").Type = 1 'メールのタイトル .Subject = "クエリ1" 'メールの本文 .Body = MailSentence '確認用としてOutlookを表示する .Display End With SendMail.Send End Function

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

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

bat

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

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

sazi

2022/06/07 07:51

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VBA

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

Access

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