Запросы от XMLDom для получения XML из API блокируются - PullRequest
0 голосов
/ 06 июня 2018

Я написал макрос в VBA для Excel 2010 для извлечения данных из API, который возвращает XML.Я делаю это добровольно, чтобы помочь моей жене и ее коллегам выполнять большую часть ручной работы.Итак, макрос используется в корпоративной среде, где настройки безопасности не в моих руках, и, поскольку я никогда не работал в корпоративной среде, я также понятия не имею, какие есть возможности.

Однако ИТ-специалистызаявили, что готовы помочь, но понятия не имеют, как это исправить.Поэтому мне интересно, может ли кто-нибудь здесь указать правильное направление, как заставить это работать на всех ПК.

Код приведен ниже, и он работает на домашних ПК всех коллег моей жены и моего собственноготоже.Это также работает на некоторых рабочих ПК, но на некоторых нет.Код не выполняется в части objDoc.Load, он показывает мое сообщение об ошибке:

MsgBox ("There was an error when connecting to the API)

Интересно, есть ли корпоративные настройки или индивидуальные настройки Excel, которые блокируют доступ к внешним URL-адресам в макросах.Я не удивлюсь, так как это будет хорошая безопасность, но я думаю, что должен быть способ добавить URL-адрес в белый список?

У кого-нибудь есть идеи, как это можно исправить?Либо в коде, либо в настройках Excel 2010, либо в любых других корпоративных настройках Office, о которых я не знаю?

Dim strUrl as String
Dim objDoc As Object
Set objDoc = CreateObject("MSXML2.DOMDocument")
objDoc.async = False

strUrl = {api URL}

    If objDoc.Load(strUrl) Then
        'it worked!
    Else
        MsgBox ("There was an error when connecting to the API)
        Exit Function
    End If

1 Ответ

0 голосов
/ 06 июня 2018

Подойдите, сузив поле ошибки

Видимо, ваш код, использующий позднюю привязку, выполнен, но отображает сообщение об ошибке.Часто код XML содержит нечитаемые символьные объекты (например, амперсанды &).Вы можете сузить поле ошибки, заменив полный блок Else в своем коде следующими операторами:

  Dim xPE        As Object    ' Set xPE = CreateObject("MSXML2.IXMLDOMParseError")
  Dim strErrText As String
  Set xPE = objDoc.parseError
  With xPE
     strErrText = "Load error " & .ErrorCode & " xml file " & vbCrLf & _
      Replace(.URL, "file:///", "") & vbCrLf & vbCrLf & _
      xPE.reason & _
      "Source Text: " & .srcText & vbCrLf & vbCrLf & _
      "Line No.:    " & .Line & vbCrLf & _
      "Line Pos.: " & .linepos & vbCrLf & _
      "File Pos.:  " & .filepos & vbCrLf & vbCrLf
  End With
  MsgBox strErrText, vbExclamation
  Set xPE = Nothing
  Exit Function

Дополнительная подсказка

Если вы установите objDoc объект в память с Set objDoc = CreateObject("MSXML2.DOMDocument"), как правило, вы получаете более старую версию (3.0), поэтому в большинстве случаев предпочтительнее вместо этого явно использовать Set objDoc = CreateObject("MSXML2.DOMDocument.6.0"), чтобы получить последнюю версию 6.0.

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