我正在编写一个宏,它将抓取我公司的内部 SAP 站点以获取供应商信息。出于几个原因,我必须使用 VBA 来做到这一点。但是,我无法弄清楚为什么在尝试抓取页面时会不断收到这三个错误。这可能与UAC 完整性模型有关吗?还是我的代码有问题?是否可以在 Internet Explorer 中以不同方式处理使用 http 的网页?我可以访问任何网页,甚至是其他内部网页,并且可以很好地抓取其中的每一个。但是当我尝试抓取 SAP 页面时,我得到了这些错误。错误描述及其发生时间是:
800706B5 - 接口未知(在运行有问题的代码之前放置断点时发生)
80004005 - 未指定的错误(当我没有放置任何错误并让宏运行时发生)
80010108 - 调用的对象已与其客户端断开连接。(我似乎无法始终如一地发生此错误,它似乎发生在 excel 中的某些内容严重损坏以至于无法加载任何页面并且我必须重新安装 excel 的时候)
我完全不知道发生了什么。Integrity 页面对我来说没有多大意义,我在此找到的所有研究都谈到了连接到数据库以及使用 ADO 和 COM 引用。但是,我通过 Internet Explorer 做所有事情。下面是我的相关代码:
Private Sub runTest_Click()
ie.visible = True
doScrape
End Sub
'The code to run the module
Private Sub doTest()
Dim result As String
result = PageScraper.scrapeSAPPage("<some num>")
End Sub
PageScraper 模块
Public Function scrapeSAPPage(num As Long) As String
'Predefined URL that appends num onto end to navigate to specific record in SAP
Dim url As String: url = "<url here>"
Dim ie as InternetExplorer
set ie = CreateObject("internetexplorer.application")
Dim doc as HTMLDocument
ie.navigate url 'Will always sucessfully open page, regardless of SAP or other
'pauses the exection of the code until the webpage has loaded
Do
'Will always fail on next line when attempting SAP site with error
If Not ie.Busy And ie.ReadyState = 4 Then
Application.Wait (Now + TimeValue("00:00:01"))
If Not ie.Busy And ie.ReadyState = 4 Then
Exit Do
End If
End If
DoEvents
Loop
Set doc = ie.document 'After implementation of Tim Williams changes, breaks here
'Scraping code here, not relevant
End Function
我在 Windows 7 机器上使用 IE9 和 Excel 2010。您可以提供的任何帮助或见解将不胜感激。谢谢你。