2015-08-13 126 views
0

我有一個與Excel VBA的問題,因爲我想使用下面的代碼,我一直在接收標題中提到的編譯器錯誤。子或功能未定義的問題

我通過混合和匹配來完成代碼,而我自己的一些工作並不是高質量的,我甚至不知道代碼是否可以工作。

我試圖添加引用,但沒有奏效,我不知道這裏的代碼究竟是什麼部分。

提前感謝幫助。

Sub Emails_Verifier() 
    Dim i As Integer 
     Dim IE As Object 
     Application.ScreenUpdating = False 
     Application.DisplayAlerts = False 
    Set IE = CreateObject("InternetExplorer.Application") 
    IE.Visible = True 
    IE.Navigate "website" 
    Application.StatusBar = "Submitting" 
     While IE.Busy 
      DoEvents 
     Wend 
    For i = 2 To lastRow 
      IE.Document.getElementById("id").Value = cell(i, 7) 
      IE.Document.getElementById("Submit").Click 
     Application.StatusBar = "Form Submitted" 
     IE.Document.getElementsByName ("elementID") 
     If InStr(elm.innerText, "E-mail address") Then 
      Set cell(i, 14) = elm.innerText 
     End If 
     Next i 
     IE.Quit 
    Set IE = Nothing 
    End Sub 
+1

通過你的代碼行,並找到問題。輸入模塊並按f8,直到出錯。然後回來告訴我們問題是什麼。另外 - 你的組織有點草率;一般的做法是在每個「封閉」的論點集中縮進。即:你的「For i = 2 loop」應該縮進到與「Next i」線相同的程度。 –

+0

謝謝,我會馬上進行檢查。而且我知道這個組織,我也會有這個固定的,因爲我在這方面還是個新手。 – Suleiman

回答

0

@尼古拉斯是正確的cells部分。

另一個問題是,您正在嘗試訪問elm作爲對象而無需初始化它。你必須首先初始化它,像這樣:

Sub Emails_Verifier() 
    Dim i As Integer 
    Dim IE As Object 
    Dim objCollection As Object 

    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 
    Set IE = CreateObject("InternetExplorer.Application") 
    IE.Visible = True 
    IE.Navigate "website" 
    Application.StatusBar = "Submitting" 
    While IE.Busy 
     DoEvents 
    Wend 
    For i = 2 To lastRow 
     IE.Document.getElementById("id").Value = cells(i, 7) 
     IE.Document.getElementById("Submit").Click 
     Application.StatusBar = "Form Submitted" 
     Set objCollection = IE.Document.getElementsByName ("elementID") '<--- 
     j = 0 '<--- 
     While j < objCollection.Length 
      If InStr(objCollection(j).innerText, "E-mail address") Then 
       Set cells(i, 14) = elm.innerText 
      End If 
      j = j + 1 
     Wend 
    Next i 
    IE.Quit 
    Set objCollection = Nothing 
    Set IE = Nothing 
End Sub 
+0

謝謝你,我不知道這件事。我正在使用,因爲我試圖從網站標記文本中獲取結果,現在我注意到它不能以這種方式工作,因爲我只需要獲取最後一個td標記的確切文本。所以我會盡力找出我能做些什麼.. 再次感謝 – Suleiman

+0

「objCollection(j).innerText」應該給你標籤的文字。 – ManishChristian

0

現在試試這個:

Sub Emails_Verifier() 

    Dim i As Integer 
    Dim IE As Object 

    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 

    Set IE = CreateObject("InternetExplorer.Application") 

    IE.Visible = True 
    IE.Navigate "website" 

    Application.StatusBar = "Submitting" 

    While IE.Busy 
     DoEvents 
    Wend 

    For i = 2 To lastRow 

     IE.Document.getElementById("id").Value = Cells(i, 7) 
     IE.Document.getElementById("Submit").Click 
     Application.StatusBar = "Form Submitted" 
     IE.Document.getElementsByName ("elementID") 

     If InStr(elm.innerText, "E-mail address") Then 
      Set Cells(i, 14) = elm.innerText 
     End If 

    Next i 

    IE.Quit 

    Set IE = Nothing 

End Sub 

主要錯誤是在你的功能,下面一行用cell

IE.Document.getElementById("id").Value = cell(i, 7) 
Set Cells(i, 14) = elm.innerText 

我修改了它Cells。其實,

這不好。我建議使用Sheets("sheetname").Cells(row, column)

+0

其實這工作,謝謝!代碼沒有達到我想要的目的,但我會嘗試讓我自己修復這個問題。 再次感謝 – Suleiman

+0

歡迎您! –