我有两个内置于Excel中的应用程序,它们使用VBA将工作表中的某些用户输入数据转换为XML,然后使用XSLT转换为HTML。这两个应用程序都是大约构建的。 6年前,此代码一直有效。
上周,我收到报告,尝试将xml转换为html时,应用程序失败,并在transformNode行上弹出“访问被拒绝”错误。
这是原始代码:
Set xmlObj = CreateObject("MSXML2.DOMDocument.3.0")
xmlObj.LoadXML (xmlFragment)
Set xslObj = CreateObject("MSXML2.DOMDocument.3.0")
xslObj.Load (xslFile)
transformObj = xmlObj.transformNode(xslObj)
Open outputFile For Output As #2
Print #2, transformObj
Close #2
然后我尝试通过更改代码以使用DOMDocument 6.0和transformNodeToObject函数/方法来解决此问题,但是我看到相同的错误出现在transformNodeToObject行上。这是新代码:
Dim xmlSource As MSXML2.DOMDocument60
Dim stylesheet As MSXML2.DOMDocument60
Dim result As MSXML2.DOMDocument60
Set xmlSource = New MSXML2.DOMDocument60
Set stylesheet = New MSXML2.DOMDocument60
Set result = New MSXML2.DOMDocument60
result.async = False
xmlSource.async = False
'xmlSource.LoadXML (xmlFragment)
xmlSource.Load ("D:\ELFH SVN\eLibrary Generator\trunk\styles\testSource.xml")
stylesheet.async = False
stylesheet.resolveExternals = True
stylesheet.SetProperty "AllowXsltScript", True
stylesheet.SetProperty "AllowDocumentFunction", True
stylesheet.Load (xslFile)
If (xmlSource.parseError.ErrorCode <> 0) Then
MsgBox ("Error loading source document: " & xmlSource.parseError.reason)
ElseIf (stylesheet.parseError.ErrorCode <> 0) Then
MsgBox ("Error loading stylesheet document: " & stylesheet.parseError.reason)
Else
'transformObj = xmlSource.transformNode(stylesheet)
xmlSource.transformNodeToObject stylesheet, result
End If
尽管我过去不必这样做,但为了找出问题,我也在Excel中打开了我的安全设置,以查看它们是否阻止了代码的运行:
由于问题只是刚刚发生,我想知道它是否与Excel或Windows 10更新有关,是否有人遇到过此问题?
除非有任何其他建议,否则我将尝试在旧版本的Excel上的Windows 7或XP的VM中运行代码,以尝试证明在更高版本的OS或Excel更新中存在此问题。< / p>