2015-08-13 82 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

欢迎您! –