2016-11-08 10 views
0

私はVBAスクリプトでいくつかのIEの自動化をやっている、といくつかの理由のために私のコードのVBAスクリプトの動作が予測できないのはなぜですか?

「に設定IE =のCreateObject(」InternetExplorer.Application「)」

ラインは、それがするのでループしているように見えます1つではなく、3-7のIEブラウザを起動することがあります。最も悪化しているのは、自分のマシンで正常に動作することですが、他の人に電子メールを送信すると、通常正しく動作しません。

Private Sub LauncherButton_Click() 
'Here an instance of Internet Explorer is created, 
' and pointed at the login page 
Dim IE As InternetExplorer 
Set IE = CreateObject("InternetExplorer.Application") 
URL = "www.google.com" 
IE.Visible = True 
IE.Navigate URL 


'The script waits for Internet Explorer to finish loading 
Application.Wait Now + TimeValue("00:00:03") 

'Here the login info is taken from the user inputs and entered 
' login page 
ID = Worksheets("home").Range("B25") 
PW = Worksheets("home").Range("B26") 

Application.SendKeys ID, True 
Application.SendKeys "{TAB}", True 
Application.SendKeys PW, True 
Application.SendKeys "{TAB}", True 
Application.SendKeys "{TAB}", True 
Application.SendKeys "{TAB}", True 

'This command will 'click' the login button, it will remain 
' commented until a user with access can run the script 

'Application.SendKeys "~", True 

'After the login info is entered it is removed from memory 
Worksheets("home").Range("B25").Clear 
Worksheets("home").Range("B26").Clear 
ID = "" 
PW = "" 
End Sub 

実際のターゲットにはイントラネットでしか到達できないため、私はゴーグルに変更しました。また、ログインページがロードされていないため、sendKeys部分は無関係です。

+0

マイクロソフトのライブラリ、インターネットコントロール、HTMLを使用して適切なオブジェクトを使用することをお勧めします。また、3秒のループではなく読み取りとステータスを使用することをお勧めします。 'getElementByID(" UserName ")。value = ID' –

+0

ありがとう、私はそれを探しています。私はこれらの変更を行うと、私はこの記事を更新する –

+0

要素を取得する別の方法はありますか? htmlコードには、idプロパティやtagプロパティはありません。 –

答えて

0

はすべてのプレーで多くの要因があります。

あなたはVBAコードは、その関数の環境の中で残っている機能を開始するとき。私が今日見つけたように、IEはnavigate関数が呼び出されると新しいウィンドウを呼び出します。したがって、VBAは接続が失われたことを返します。

試してください:あなたのログインの詳細について

 

    Private Sub UserForm_Password_AfterUpdate() 
     set WebBrowser = New InternetExplorerMedium 
     WebBrowser.visible = True 
     WebBrowser.Navigate yourLoginPageURL 

     While WebBrowser.Busy = True 
      DoEvents 
     Wend 

     WebBrowser.Document.getElementById("UName").value = Worksheets("home").Range("B25") OR txtBoxUname.Text 
     WebBrowser.Document.getElementById("UPwd").value =  Worksheets("home").Range("B26") OR txtBoxPwd.text 
     Worksheets("home").Range("B25").Clear 
     Worksheets("home").Range("B26").Clear 
    End Sub 


    Private sub cboAddress_AfterUpdate() 
     if cboAddress.Text > "" then 
      WebBrowser.Quit 
      Set WebBrowser = Nothing 
      newIE 
     End If 
    End Sub 

    Private Sub newIE() 
     Set WebBrowser = CreateObject("InternetExplorer.Application") 
     With WebBrowser 
      Hwnd = .Hwnd 
      .Navigate cboAddress.Text 
      .Visible = True 
     End With 

     While WebBrowser.Busy 
      DoEvents 
     Wend 
    End Sub 

あなたが使用できるのconst =のuNameとのConst = UPwd。

+0

提案していただきありがとうございます、私はこの作品を作品単位で実装しています。これまでのところ、私は最初のサブを完了しましたが、実行時エラーが非常に断続的に発生しました。「オブジェクト変数またはブロック変数が設定されていません」と表示されます。デバッグボタンをクリックすると、最初のgetElement行が強調表示されます。 –

+0

最初に空白のページを開きます。最初のインスタンスのページに移動します。その後、それぞれのウェブブラウザー接続を閉じ、それぞれの新しいナビゲーションで新しいInternet Explorerオブジェクトを作成します。 –

+0

ここでは私が今作業したプロジェクトを紹介します。エクセルファイルのIEリンクフォームを使用してください。それは空白のInternet Explorerウィンドウをロードし、Webリンクドロップダウンでアドレスを選択してフォーム内をナビゲートし、フォームの関数ドロップダウンで「ナビゲート」を選択することができます。 –

関連する問題