单行线程/在Excel中按顺序执行公式

时间:2015-10-01 20:27:57

标签: excel vba excel-vba

我在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

0 个答案:

没有答案