快速上下文:我有一个基本的excel电子表格,其中包含三个字段:Client_URL,Client_Name和AHREFs_Rank。当在Client_URL中输入URL时,我想:
我在第3步遇到了问题。
这是目前使用的第3步的完整代码,我遇到了"编译错误:需要对象"的问题。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = Range("Client_URL").Row And _
Target.Column = Range("Client_URL").Column Then
Dim HTMLDoc As HTMLDocument
Dim MyBrowser As InternetExplorer
Dim MyHTML_Element As IHTMLElement
Dim MyURL As String
MyURL = "https://ahrefs.com/user/login"
Set MyBrowser = New InternetExplorer
MyBrowser.navigate MyURL
MyBrowser.Visible = True
Do
Loop Until MyBrowser.readyState = READYSTATE_COMPLETE
Set HTMLDoc = MyBrowser.document
HTMLDoc.all.Email.Value = "login@email.com"
HTMLDoc.all.Password.Value = "password123"
For Each MyHTML_Element In HTMLDoc.getElementsByTagName("input")
If MyHTML_Element.Type = "submit" Then MyHTML_Element.Click: Exit For
Next
MyURL = "https://ahrefs.com/dashboard/metrics"
MyBrowser.navigate MyURL
Do
Loop Until MyBrowser.readyState = READYSTATE_COMPLETE
Set HTMLDoc = MyBrowser.document
HTMLDoc.activeElement.Value = Range("Client_URL").Value
HTMLDoc.getElementById("dashboard_start_analysing").Click
Do
DoEvents
Loop Until MyBrowser.readyState = READYSTATE_COMPLETE
Set HTMLDoc = MyBrowser.document
Dim rankInnertext As Object
rankInnertext = HTMLDoc.getElementById("topAhrefsRank").innerText
MsgBox rankInnertext
End If
End Sub
如果我删除" Set"来自" rankInnertext ="然后我得到运行时错误91"对象变量未设置"。
要分解它,在步骤3中我已经:在前一页上提交了一个字段,我正在等待当前页面完成加载。然后,我尝试使用ID" topAhrefsRank"来拉取链接的内部文本。并设置单元格的值" AHREFs_Rank"将内部文本的值等于字符串。
视觉基础非常新,所以感谢任何帮助。
更新:根据建议更改了代码。已将rankInnertext从String更改为Object。现在接收"运行时错误91:对象变量或未设置块变量"
答案 0 :(得分:0)
试试这个 - 你有错误吗?
Dim rankInnertext '<< variant OK here
rankInnertext = HTMLDoc.getElementById("topAhrefsRank").innerText
MsgBox rankInnertext
答案 1 :(得分:0)
UPDATE!我设法通过强制VBA等待特定时间来确保所有页面脚本都已加载来解决此问题。出于某种原因,无论我如何等待页面加载,元素都不可用,因为它们是通过脚本加载的。
我按照以下代码强制执行时间延迟:
Dim time1
Dim time2
time1 = Now
time2 = Now + TimeValue("0:00:20")
Do Until time1 >= time2
DoEvents
time1 = Now()
Loop
现在正在msgbox中显示正确的值,因此我现在可以提取此数据并将其指定为Excel单元格的值,这正是我所追求的。
感谢所有回复的人 - 非常感谢!