Почему вызов с листа замедляет всю процедуру? - PullRequest
0 голосов
/ 13 февраля 2020

Если я запускаю этот код из среды IDE VBA, например, нажимая F5 в подпрограмме Test, мое соединение и анализ xml происходят почти мгновенно.

Sub Test()

Sheet1.Range("4:20000").Clear

Dim con As New msxml2.ServerXMLHTTP60
    con.Open "GET", "mySite", False, "username", "password"
    con.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
    con.send

Dim xmlDoc As msxml2.DOMDocument60
Set xmlDoc = con.responseXML

    parseXmlDoc xmlDoc

End Sub


Private Sub parseXmlDoc(xmlDoc As msxml2.DOMDocument60)

Dim r As Integer: r = 3
Dim c As Integer: c = 0

Dim oo As Object
Dim pp As Object
Dim qq As Object

On Error GoTo ErrHandle
With Sheet1
    Set oo = xmlDoc.SelectNodes("root/myNode")     
    For Each pp In oo
        r = r + 1
        For Each qq In pp.ChildNodes
            c = c + 1
            .Cells(r, c).Value2 = qq.nodeTypedValue
        Next qq
        c = 0
    Next pp
End With
ErrHandle:

End Sub

Однако, если я добавляю гиперссылка и вызов подпрограммы оттуда, цикл по документу xml занимает около 5 секунд ... Почему это происходит и как я могу это остановить!?

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
  Select Case Target.Range.Address(False, False)
    Case "A1"
        Test
  End Select
End Sub

Я просто звоню рутина из другого места. У меня нет никаких расчетов на листе, и нет никаких других событий на листе. Как я уже сказал, если я запускаю подпрограмму Test из моей IDE, она работает за миллисекунды ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...