使用VBA在VBA中通过xslt将XML导入MS Access

时间:2019-06-27 14:43:28

标签: xml vba ms-access xslt

我正在尝试将XML文件导入MS-Access。至此,这是一个保存的导入方法,其中XML文件由XSLT文件转换。通过单击表单,宏将调用importmethod。

我想将其放入VBA,目标是也将XSLT文件写入VBA。这样就不必依赖单独的文件,也不必冒着删除XSLT文件和Access不再导入该文件的风险。

我从类似的stackoverflow问题中找到了代码,这些代码显示了如何解决部分问题,但这些代码引用的是单独的XSLT文件。

有人可以帮我把XSLT放入VBA尾声吗

将XSLT代码粘贴到xslDoc.Load中会导致错误。

Public Sub TransformAndImportXML()
    ' INCLUDE Microsoft XML, v3.0 REFERENCE
    Dim xmlDoc As New MSXML2.DOMDocument, xslDoc As New MSXML2.DOMDocument, newDoc As New MSXML2.DOMDocument
    xmlDoc.Load "C:\Path\To\XML\Input.xml"
    xslDoc.Load "C:\Path\To\XML\File.xsl"

    xmlDoc.transformNodeToObject xslDoc, newDoc
    newDoc.Save "C:\Path\To\XML\Output.xml"

    Set xmlDoc = Nothing: Set xslDoc = Nothing: Set newDoc = Nothing

    Application.ImportXML "C:\Path\To\XML\Output.xml"
    MsgBox "Successfully transformed and imported XML!", vbInformation
End Sub

1 个答案:

答案 0 :(得分:0)

我陷入了错误的方向。我已将代码更改为首先使用

在特定文件夹中打印xsl文件。
Public Function CreateXSLFile()
Dim XSLDirectory As String
Dim XSLFile As String

XSLDirectory = "XXXXX"
XSLFile = XSLDirectory & "\YYYY.xsl"
Open XSLFile For Output As #1

Print #1, "<xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">"
Print #1, "<xsl:output method=""xml"" version=""1.0"" encoding=""UTF-8"" indent=""yes"" />"
Print #1, ""
...
Close #1 

End Function

比宏仍然调用保存的导入方法。

比宏调用一个函数删除XSL文件(如果找到):

Public Function RemoveXSLFile()
Dim XSLDirectory As String
Dim XSLFile As String

XSLDirectory = "XXXXX"
XSLFile = XSLDirectory & "\YYYY.xsl"

If Len(Dir(XSLFile)) > 0 Then
   SetAttr XSLFile, vbNormal
   Kill XSLFile
End If
End Function

这样,我确定没有人会意外删除xsl文件,并且不需要包含Microsoft v XML3.0。

亲切的问候