ここでいくつかの機能を自動化しようとしています。そのために、単純なシステムを構築しました。
ローカル Web ページでは、必要なすべてのデータを入力し、ボタンを押すと、このすべてのデータが Excel シートに転送されます。
良いニュースは次のとおりです。悪いニュース?すべてのコンピューターにあるわけではありません。
ユーザーが VBScript を開くと、すべてが開始されます。このスクリプトは、ページを開き、いくつかのアクションをリッスンします。このようなアクションが実行されると、ページが閉じられ、その内容が Excel ファイルに書き込まれます。
このスクリプトを自宅のコンピューターで実行すると、魔法のように機能し、何の問題もありません。しかし、これをオフィスで実行しようとすると、話はまったく異なります。
ページをGoogleに変更すると、IEが機能したため、ローカルページを開くと、IEのアイデンティティの一部が失われるようです。
FilePath = "C:\Hours"
PageFilePath = FilePath & "\HourAppointment.html"
'PageFilePath = "www.google.com"
Set objExplorer = CreateObject("InternetExplorer.Application")
objExplorer.Visible = 1
objExplorer.Width = 1200
objExplorer.Height = 700
objExplorer.Left = 10
objExplorer.Top = 10
Call objExplorer.Navigate2( PageFilePath )
Call WaitForIExplorer( objExplorer )
objExplorer.Quit
Private Function WaitForIExplorer(objExplorer)
Do until objExplorer.readyState = 4
WScript.Sleep 1000
Loop
Do While objExplorer.Busy = True
WScript.Sleep 1000
Loop
End Function
ページは正常に開きますが、スクリプト エンジンが ReadyState を読み込もうとするとすぐに失敗します。
ReadyState を読み取る前に遅延を設定する (10 秒以上) など、いくつかの組み合わせを試しましたが、役に立ちませんでした。また、IE オブジェクトが決して null ではないこと、IsNull 関数で確認したこと、IE のセキュリティ設定をいじったこと、特に何も管理していないことも言及する価値があります。作る。
それで、誰かが私のプログラムで一体何が起こっているのか知っていますか?
@Teemu のおかげで、ReadyState ではなく Busy のみを使用して問題を最小限に抑えることができました。それでも、私は新しい機能を追加しました:
Private Function CheckValidity(objExplorer)
CheckValidity = False
Set bodyContent = objExplorer.Document.Body.All
saveValue = bodyContent.savePressed.Value
appointValue = bodyContent.newAppointmentPressed.Value
If ((saveValue = "SAVE") _
And (appointValue = "SAVE")) Then
CheckValidity = True
End If
End Function
Document Body を取得しようとすると、Interface Unknown Error で失敗します。これは、ページが完全に読み込まれていないためだと理解していますが、その前に別の Sleep 呼び出しを変更せずに行ったため、よくわかりません。
編集: 以下の私の回答を使用して、IE がページ上のスクリプトをブロックしていて、それらを有効にするように求めているために問題が発生していることに気付きました。クリックするとページがリロードされ、スクリプトが失われます。今のところ解決策がなく、調査中です。