我在VBA for Excel中编写了一个简单的宏函数来提取出现在HTML文档中特定位置的文本,首先从另一个单元格中的URL值检索HTML文档。宏函数本身并不重要,除了它发送HTTP请求并创建一个HTML文件对象这一事实,我担心如果我粘贴一个包含100个或更多URL的列并开始尝试,Excel将导致崩溃一次计算所有值。如果我将公式拖到已有一列URL的10个单元格中,我可以看到它停止并搅拌了一会儿。是否有设置强制Excel一次计算一个公式,这样可能需要更长时间但不太可能冻结或崩溃?
更新:我在函数中加入了一个静态集合变量,以至少避免在同一工作表中重复减速检索相同的HTML:
Function GetUSPatentAbstract(ByVal url As String) As String
Static colAbstract As New Collection
Dim abstract As String
On Error Resume Next
abstract = colAbstract(url)
`如果集合中的URL没有抽象,则检索它:
If Err.Number <> 0 Then
Dim description As String
Dim abstractStart As Long
Dim abstractEnd As Long
Dim abstractLength As Long
Set html_doc = CreateObject("htmlfile")
Set xml_obj = CreateObject("MSXML2.XMLHTTP")
xml_obj.Open "GET", url, False
xml_obj.send
html_doc.body.innerhtml = xml_obj.responseText
Set xml_obj = Nothing
description = html_doc.body.innertext
abstractStart = InStr(description, "Abstract") + 8
abstractEnd = InStr(description, "Inventors:")
abstractLength = abstractEnd - abstractStart
abstract = Mid(description, abstractStart, abstractLength)
colAbstract.Add Item:=abstract, Key:=url
End If
On Error GoTo 0
GetUSPatentAbstract = abstract
End Function