プロが教えるわが家の防犯対策術!

初めまして。
調べてみても同様の事例が見つからず、理解のきっかけも想像出来ませんでしたので質問させてください。


現象としては、「ログオンしている状態であればダブルクリックで動かしても、スケジューラを使って動かしても問題なく動く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」を実際に当てはまる数字(テキストデータ全体の文字数よりも少ない数字)にしてもエラーが走ります。


現状は運用の方法を変え(いつまで経ってもロックされない仕様にしました。)
対応して問題なく動いているところですが、いまいち腑に落ちなく投稿いたしました。
どなたかご教授いただけますと幸いです。

A 回答 (1件)

> IE.Visible = True


の部分をカットするとどうなりますか?
デスクトップがない(ログインしていない)のにウィンドウを表示させようとすると基本的にエラーになると思いますが・・・

この回答への補足

>> IE.Visible = True
>の部分をカットするとどうなりますか?

レスポンスが遅くなりまして、申し訳ありません。。
早速試してみましたところ、同様に

>上記のソースの中で「strSchedule = Mid(Schedule,counterStart)」の部分でエラーが走ってしまいます。
>内容としては、要するにMidの引数がふさわしくないとのことなのですが、
>試しに「counterStart」を実際に当てはまる数字(テキストデータ全体の文字数よりも少ない数字)にしてもエラーが走ります。

のエラーが走ります・・・。

補足日時:2008/09/16 22:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!