Получение имени файла из диалога - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь прочитать файл XML и изменить даты в XML, используя другой файл excel, и выполнить vlookup для этого файла excel. После перезаписи даты я сохраняю XML файл.

, но при открытии файла Excel получаю Error MisMatch Type 13 error . Я играл в тусклые типы, но вроде ничего не работает. Может кто поможет?

Вот код:

Function GetFile() As String
    Application.ScreenUpdating = False

'**Open XML'**

    Dim XML_in As Variant
    XML_in = Application.GetOpenFilename(FileFilter:="XML (*.XML), *.XML", Title:="Select XML Order List")
    If XML_in = False Then Exit Sub
    GetFile = XML_in
    Set oXMLFile = CreateObject("Msxml2.DOMDocument.3.0") 
    XMLFileName = XML_in 'XML IN Filename'
    Debug.Print XML_in

'**Manipulate oXML'**

    oXMLFile.Load (XMLFileName) 'Read XML'
    Set xmlGroup = oXMLFile.SelectNodes("/ppr:pprdata/ppr:Group") 'Navigate to ppr:Group'
    Set xmlOrderLists = xmlGroup(1) 'Navigate to <ppr:Group name="Order lists">'
    Set xmlProdPgm = xmlOrderLists.SelectNodes("ppr:ProductionProgram")
    Set xmlFirmOrders = xmlProdPgm(0).ChildNodes

'**Open AMS File'**

    Dim src As Variant '
    Set src = Application.GetOpenFilename(FileFilter:="Excel Files (*.xlsx), *.xlsx", Title:="Open AMS File")
    If src = False Then Exit Sub
    'Workbooks.Open("AMS Schedule example.xlsx", True, True)
    Set Sheet = src.Worksheets("Sheet1")
    Set ran = Sheet.range("A1:B9")

    For i = 1 To xmlFirmOrders. Length - 1 
        Debug.Print xmlFirmOrders(i).Attributes.getNamedItem("ppr:id").Value
        Set xmlNumber = xmlFirmOrders(i).SelectSingleNode("ppr:number")
        Set xmlStartTime = xmlFirmOrders(i).SelectSingleNode("ppr:startTime")
        xmlStartTime.Text = Application.WorksheetFunction.IfError(Application.WorksheetFunction.vlookup(xmlNumber, ran, 2, 0), "NOTFOUND") 'Update ppr:Starttime'
    Next i

'**Close AMS File**

    src.Close False
    Set src = Nothing

'**Save XML'**

    Dim XML_out As Variant
    XML_out = Application.GetSaveAsFilename(FileFilter:="XML (*.XML), *.XML", Title:="Output XML File for Avix")
    If XML_out = False Then Exit Sub
    GetFile = XML_out
    oXMLFile.Save XML_out
    Debug.Print XML_out

    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Function

1 Ответ

0 голосов
/ 28 мая 2020

Я бы использовал следующий код. Сначала получите FileName как строку, которая использует Workbooks.Open для открытия файла.

 Dim src As String
 Dim wb As Workbook
 src = Application.GetOpenFilename(FileFilter:="Excel Files (*.xlsx), *.xlsx", Title:="Open AMS File")
 Set wb = Workbooks.Open(src)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...