- - PR -
VBSコンパイルエラーの原因が分かりません‥‥
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-09-16 00:44
初めまして、新人SEと申します。
現在、社内サーバを監視するためにVBSを作成していますが、コンパイルしても うまくいきません。 まだ、VBSを触り始めて日が浅く何が原因かも分からないため困り果てております。 ど素人のプログラムで申し訳ございませんが、どなたか詳しい方がいらっしゃれば どこが悪いのかご教授お願いいたします。 ------------------------------------------------------------------------------- Dim Host(2) Host(0) = "hostname1" Host(1) = "hostname2" For i = 0 To 1 '各監視端末をターゲットにする Target = Host(i) For j = 1 To 3 Set objWMIService = GetObject("winmgmts:\\.") Set PingSet = objWMIService.ExecQuery ("Select * From Win32_PingStatus Where Address = '" & Target & "'") For Each Ping In PingSet if PingSet.StatusCode = 0 then '正常なpingならばsuccess msgbox("success.") j = 3 Exit For else if PingSet.StatusCode <> 0 then 'pingが届かなければ3回までpingを実行する if j = 3 then 'pingが3回目届かなければerror Select Case PingSet.StatusCode Case 11010 msgbox("request timed out.") Case Else msgbox("error.") End Select end if end if Next Next WScript.Sleep(5000) '5秒後に次の監視端末へping Next ------------------------------------------------------------------------------- |
|
投稿日時: 2008-09-16 09:59
For Each Ping In PingSet
でループさせている中で、PingSet.StatusCode を使おうとしています。 PingSetにはStatusCodeというプロパティがないようですね。 PingSetではなく、Pingを使うのでしょう。 エラーがでる、というならどういうエラーがでたのか示さないと、私は、 「実行時エラー'438':オブジェクトは、このプロパティまたはメソッドをサポートしていません。」 がでたのでこれだと思いますが、違っているかも知れませんよ? というか違うはず。コンパイルエラーならデバッガがエラーメッセージを教えてくれるでしょう? エラーメッセージについてはどう考えたのですか? 無視ですか? 今回私はExcle2003のVBAで提示のソースを実行させ(Wscript.Sleepはコメント)、 エラーがでたところを確認しました。また、動的に作られているPingオブジェクトなどはローカルウィンドウでプロパティを確認しました。 あと、Ping.StatusCodeにはNullが入ってましたので、今のプログラムだとバグになりますね。 |
|
投稿日時: 2008-09-16 10:01
確かに原因の分かりにくいエラーメッセージですね・・・。
原因特定のために1行ずつ消して試してみるといいですよ。 For文かと思いきや、If文をバッサリ消すと動くようです。^^; |
|
投稿日時: 2008-09-16 10:05
ElseIf はElseとIfの間にスペースがあってはいけません。
コンパイルエラーは多分、これのことでしょう。 |
|
投稿日時: 2008-09-18 19:10
ご連絡遅れまして申し訳ございません。
ご指摘にありましたように、ELSE IF文を消去して改良した結果なんとか動くようにはなりました。(まだまだ提出できるレベルではありませんがwww) ふるふるさん、Java僧さんこんな稚拙なプログラムに対して丁寧なご指摘をして頂きありがとうございました。 |
1