Изменить XML через Excel VBA - PullRequest
0 голосов
/ 27 мая 2020

Мне нужно обновить "простой" файл XML новыми значениями и сохранить под новым именем. Для теста я пытаюсь обновить только одно значение. Но используя приведенный ниже код, я получаю сообщение об ошибке:

Ошибка времени выполнения '91': переменная объекта или переменная блока не установлена ​​

VBA:

Sub XMLTest()
Dim myVar As String, pathToXML As String
Dim xmlDoc As Object, xmlRoot As Object
    Set xmlDoc = CreateObject("MSXML2.DOMDocument")
    pathToXML = "C:\Users\Path_to_XML\PJMeasurements.xml" '<--- Update path

    Call xmlDoc.Load(pathToXML)
    Set xmlRoot = xmlDoc.getElementsByTagName("ns0:MeasurementsSO").Item(0) '<--- Is this correct?
    myVar = "9999-9999999" '<--- Update value
    xmlRoot.SelectSingleNode("SalesOrderNo").Text = myVar

    Call xmlDoc.Save(pathToXML)
End Sub

Это XML:

<ns0:MeasurementsSO xmlns:ns0="http://update.DocumentTypes.Schema.PJ Measurement.Xml">
  <SalesOrderNo>23482-4612310</SalesOrderNo>
  <Weight>83</Weight>
  <Volume>0,03</Volume>
  <Numberofcolli>1</Numberofcolli>
</ns0:MeasurementsSO>

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Вам нужно добавить пространство имен:

Sub XMLTest()
    Dim myVar As String, pathToXML As String
    Dim xmlDoc As Object, xmlNode As Object
    Set xmlDoc = CreateObject("MSXML2.DOMDocument")
    pathToXML = "C:\Temp\PJMeasurements.xml" '<--- Update path
    xmlDoc.setProperty "SelectionNamespaces", "xmlns:ns0='http://update.DocumentTypes.Schema.PJMeasurement.Xml'"
    Call xmlDoc.Load(pathToXML)
    Set xmlNode = xmlDoc.SelectSingleNode("/ns0:MeasurementsSO/SalesOrderNo")
    myVar = "9999-9999999" '<--- Update value
    xmlNode.Text = myVar
    Call xmlDoc.Save(pathToXML)
End Sub
0 голосов
/ 27 мая 2020

Обнаружил ошибку сам.

GetElementsByTagName неверно.

Обновлено выше.

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