- 締切済み
VBSのプログラムをタスクスケジューラで実行するとエラーになります。
初めまして。 調べてみても同様の事例が見つからず、理解のきっかけも想像出来ませんでしたので質問させてください。 現象としては、「ログオンしている状態であればダブルクリックで動かしても、スケジューラを使って動かしても問題なく動くVBS」を作成しました。(ソースは末尾に記載します。) しかし、「コンピュータのロックがかかっている状態(時間が経つと勝手にロックがかかる仕様になっています)」でタスクスケジューラを使いスクリプトを動かすとエラーになるというものです。 ソースは↓ 要するに特定のWEBページの情報を持ってきて置換処理をしいらない部分を削除し、メールで送信する。というスクリプトです。 ----------------------------------------------------------- Set WSHFso = CreateObject("Scripting.FileSystemObject") Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.Navigate("http://") Set WshShell = WScript.CreateObject("WScript.Shell") Do While IE.Busy Wscript.Sleep 10 Loop '↓開いたらログイン処理やページ移動処理などをして 目的のページ移動する処理があり、目的のページを開いたら↓の処理に続きます。 Do While IE.Busy WScript.Sleep 10 Loop '目的のページをテキストデータで読み込みます。 Do While IE.Document.readyState <> "complete" WScript.Sleep 100 Loop Dim Schedule '読み取ったページ内容を変数に格納します。 Schedule = IE.Document.Body.InnerText 'テキストデータの中からいらない情報を置換して消していきます。 後の処理をみると無駄な作業に見えますが諸事情により必要な処理です。 Schedule = Replace (Schedule,"89101112131415161718192021222324","") Schedule = Replace (Schedule,"891011121314151617181920212223","") Schedule = Replace (Schedule,"8910111213141516171819202122","") Schedule = Replace (Schedule,"89101112131415161718192021","") Schedule = Replace (Schedule,"891011121314151617181920","") Schedule = Replace (Schedule,"8910111213141516171819","") Schedule = Replace (Schedule,"reserved.","") 'テキストデータの中で固有のデータ(データ取得時の西暦)があるので、 それをInStrで探し出し、Midを使って固有のデータ移行のテキストデータを strScheduleの中に格納しています。 Dim strFind Dim counterStart Dim strSchedule strFind = Year(Now) counterStart = InStr(Schedule, strFind) strSchedule = Mid(Schedule,counterStart) Dim nowdate nowdate = Date() Call SendMail("aaa@aa.com", nowdate & "のスケジュール",strSchedule) '-------------- ↓サブルーチン↓ ----------------- 'メール送信 Sub SendMail(mailto,subj,body) Set bobj = CreateObject("basp21") Dim smtp '--SMTPサーバー smtp = "mail.aaa.com" mailfrom = "sysadmin@aaa.com" files = "" msg = bobj.SendMail(smtp,mailto,mailfrom, subj,body,files) End sub '------------- ↑サブルーチン↑ ----------------- IE.Quit Set objIE = Nothing ----------------------------------------------------------- 上記のソースの中で「strSchedule = Mid(Schedule,counterStart)」の部分でエラーが走ってしまいます。 内容としては、要するにMidの引数がふさわしくないとのことなのですが、 試しに「counterStart」を実際に当てはまる数字(テキストデータ全体の文字数よりも少ない数字)にしてもエラーが走ります。 現状は運用の方法を変え(いつまで経ってもロックされない仕様にしました。) 対応して問題なく動いているところですが、いまいち腑に落ちなく投稿いたしました。 どなたかご教授いただけますと幸いです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Bonjin
- ベストアンサー率43% (418/971)
> IE.Visible = True の部分をカットするとどうなりますか? デスクトップがない(ログインしていない)のにウィンドウを表示させようとすると基本的にエラーになると思いますが・・・
補足
>> IE.Visible = True >の部分をカットするとどうなりますか? レスポンスが遅くなりまして、申し訳ありません。。 早速試してみましたところ、同様に >上記のソースの中で「strSchedule = Mid(Schedule,counterStart)」の部分でエラーが走ってしまいます。 >内容としては、要するにMidの引数がふさわしくないとのことなのですが、 >試しに「counterStart」を実際に当てはまる数字(テキストデータ全体の文字数よりも少ない数字)にしてもエラーが走ります。 のエラーが走ります・・・。