[[20140414122523]] 『自動メール送信がタスクスケジューラで動作しない』(yoshi) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『自動メール送信がタスクスケジューラで動作しない。。』(yoshi)

VBAをかじったぐらいの者です。
Excel VBAにて下記を組んで、Auto_Openに記述して、自動メール送信をしています。

 手動にて動作させる分には動作するのですが、タスクスケジューラにて動作させようとすると、動作しません。。

なにがいけないのか。。全然わからない状態です。。
すみませんが、ご教授をお願いいたします。

コード:

   Dim Ap As Object
  Dim M As Object
  Dim strMOJI(2) As String
  Dim Ldate As Date
       
   
   Application.DisplayAlerts = False

  ActiveWorkbook.UpdateLinks = xlUpdateLinksAlways
  

   
   Ldate = Date - 1
   
   Worksheets("Report(Nr)").Select
  Range("E2").Value = Ldate
   
   Range("A1:Y72").Select
  Selection.CopyPicture Appearance:=xlScreen, Format:=xlBitmap

 'ここまではメールに張り付けるデータを作成しており、動作するのを確認しております。

   Set Ap = CreateObject("Outlook.Application")
  Set M = Ap.CreateItem(0)
    strMOJI(0) = "各位 お疲れ様です。 " & Range("E2").Value & " の状況を報告いたします。" & vbCrLf
    strMOJI(1) = vbCrLf & " 以上です。" & vbCrLf
    strMOJI(2) = strMOJI(0) & strMOJI(1)
    strMOJI(2) = Replace(strMOJI(2), vbCrLf, "<br>")
    M.BodyFormat = 3            'リッチテキスト形式
     M.HTMLBody = "" & strMOJI(2) & ""        'メールの本文
     M.To = Range("AB7").Value & ";" & Range("AC7").Value 'To アドレス
    M.Cc = Range("AB8").Value & ";" & Range("AC8").Value 'Cc アドレス
    M.Bcc = Range("AB9").Value & ";" & Range("AC9").Value 'Cc アドレス
    M.Subject = Range("E2").Value & " 稼働報告"  '件名
     M.Display '画面を表示

     n = Len(strMOJI(0))
    With Ap.ActiveInspector.WordEditor.Windows(1).Selection
       '貼り付け
      .GoTo 3, 1, 2
      .Paste
    End With

    M.Send

  ActiveWorkbook.Save

  Application.Quit
  ThisWorkbook.Close False

< 使用 Excel:Excel2010、使用 OS:Windows7 >


  >'ここまではメールに張り付けるデータを作成しており、動作するのを確認しております。
     ↑
    この記述と矛盾するのであまり自信はないですけど、
    標準モジュールのAuto_Open() に書かず、
      ThisWorkbookモジュールのWorkbook_Open() に書いてみたらどうですか。

(半平太) 2014/04/14(月) 15:58


返信ありがとうございます。
とりあえずWorkbook_Open()に変更したのですが。。同じでした。。
少し変更しまして、
旧)タスクスケジューラにて、Excelのマクロファイルを指定していた。
新)vbsファイルを下記のように作成して実行させました。
Const fn = "C:\****.xlsm"
On Error Resume Next
Set xlApp = CreateObject("Excel.Application")
xlApp.Workbooks.Open fn
If Err.Number = 0 Then
xlApp.Visible = True
End If
Err.Clear
On Error GoTo 0
Set xlApp = Nothing

すると、「ユーザーがログオンしている時のみ実行する」だと、動作しました。
ただ、ログオフしているときも動作させたいため、
「ユーザーがログオンしているかどうかにかかわらず実行する」にチェックすると、
また動作しなくなってしまいました。。

なにがあるんでしょうか。。わからない状態です。。
(yoshi) 2014/04/15(火) 09:23


 タスクスケジューラで実行する場合、すべての処理が通常手作業と同等にできるわけでは
 なく、機能によっては制約があります。

 今回だとログオフした状態だと、表示すべきウィンドウがないので xlApp.Visible = True
 はエラーになると思います。
 これをはずしてみて動作するか確認してどうでしょうか。

(Mook) 2014/04/15(火) 11:53


返信ありがとうございます。

そういうことなんですね。。

しかし。。IF文部分を外したのですが、状況は変わらずで、ログオン時のみ動作しました。
ログオフ時では、開始してすぐに終了しており、タスクマネージャーのプロセスで見る限りExcelは起動してきてません。。
コードの部分にもダメなものが入っているってことですかね。。
(yoshi) 2014/04/15(火) 12:40


 検索した範囲ではタスクスケジューラで EXCEL を起動して処理という話もあるので、
 まったくできないということもないとは思うのですが、ステップ単位でどこまで動いて
 いるか、確認するのが手っ取り早い気がします。

 一行ごとにファイル出力して、どこでエラーが起きているか、確認してはどうでしょうか。

 処理の先頭で
 Set debugFile = CreateObject("Scripting.FileSystemObject").CreateTextFile("C:\ExcelMailDebug.txt",True)
 各処理の間に、
 debugFile.WriteLine "××× 実行"

 のようにして動かしてみれば、どこまで動いたか確認できると思います。
(Mook) 2014/04/15(火) 15:21

 VBS案に行く前に、
 Workbook_Open()案に変更したあと、
 タスクスケジューラの全般タブにある 
   □最上位の特権で実行する
 にチェックを入れてのテストもトライしてみましたか?

(半平太) 2014/04/15(火) 15:28


(半平太)さん
返信ありがとうございます。
説明不足ですみません。「最上位の特権で実行する」をチェックしてすでにトライしています。
でも、状況は変わらずでした。

(Mook)さん
返信ありがとうございます。
こういうデバッグ勝利があるのですね。。勉強になります。
テストしてみます。
ありがとうございます。
(yoshi) 2014/04/15(火) 17:20


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.