导入XML数据后Excel 2003 VBA错误1004

导入XML数据后Excel 2003 VBA错误1004,xml,excel,excel-2003,vba,Xml,Excel,Excel 2003,Vba,我构建了一个宏,它接受不同的XML输入文件,并将每个文件导入工作簿中不同的工作表。然后保存工作簿。这在98%的时间内对数百名用户有效,但在保存工作簿时,有时会出现“错误1004:Microsoft Office Excel无法访问文件“C:\SymmPiT”的错误 我发现这与“ImportDisks:”部分中的某个XML文件太大,Excel无法导入有关。尝试手动将SYMDISK.XML文件导入空白工作簿(使用“Data-import-XML”)会导致Excel错误“XML导入错误:某些数据导入失

我构建了一个宏,它接受不同的XML输入文件,并将每个文件导入工作簿中不同的工作表。然后保存工作簿。这在98%的时间内对数百名用户有效,但在保存工作簿时,有时会出现“错误1004:Microsoft Office Excel无法访问文件“C:\SymmPiT”的错误

我发现这与“ImportDisks:”部分中的某个XML文件太大,Excel无法导入有关。尝试手动将SYMDISK.XML文件导入空白工作簿(使用“Data-import-XML”)会导致Excel错误“XML导入错误:某些数据导入失败”

我试图让Excel VBA忽略此XML导入错误。这在该阶段在宏中起作用,但在代码(用红色标记)中进一步保存工作簿时失败

如何在保存文件时避免Excel“barfing”,即使存在导入错误?还是可以在导入之前检查XML文件以避免尝试导入

下面是代码例外,非常感谢您的回复!:-)


我仔细查看了您的代码。由于缺少SPErrorHandler,并且您从错误处理程序ImportLocks中退出的代码也丢失了-我假设您的示例中缺少几行VBA代码。您可以检查您的代码示例以确保其完整性吗?您是对的,很抱歉出现任何混淆。此例程的完整代码大约为25行00行,因此我删除了不相关的部分。部分ImportLocks只是ImportDisks之后导入过程的下一部分,并导入不同的XML文件,它不是错误处理程序。错误处理程序SPErrorHandler位于代码末尾,只显示错误消息1004,然后退出程序,它不会重新运行e所以它不会影响我想这里的部分。对你来说,这样行吗,我不想让你看这么多代码的眼睛被刺伤…:)导入的XML文件从几kB到20MB不等,我只在一些文件上看到问题,其他大小的文件导入很好。我仔细查看了你的代码。因为SPErrorHandler丢失了,你的退出m错误处理程序ImportLocks丢失-我假设您的示例中有几行VBA代码丢失。请检查您的代码示例以确保其完整性好吗?您是对的,很抱歉有任何混淆。此例程的完整代码约为2500行,因此我删除了不相关的部分。部分ImportLocks是sim在ImportDisks之后执行导入过程的下一部分,并导入另一个XML文件,它不是一个错误处理程序。错误处理程序SPErrorHandler位于代码末尾,只显示错误消息1004,然后退出程序,它不会继续,所以我想它不会影响这里的部分。对你来说,这样行吗,我不想要看这么多代码会让人眼花缭乱……:-)导入的XML文件的大小从几kB到20MB不等,我只在一些文件上看到问题,其他这种大小的文件导入很好。
Sub ImportData()
On Error GoTo SPErrorHandler    
Application.DisplayAlerts = False
Sheets("SymmPiT").Select
Range("F15").Select

Dim SaveName As String
Dim Section As Integer

ImportDisks:
Section = 7
On Error GoTo ImportLocks
Sheets.Add.Name = "Disks"
Application.ScreenUpdating = False

Range("A2").Select
    ActiveCell.FormulaR1C1 = "from symdisk list -v"
If (Dir("C:\SymmPiT\SYMDISK.XML") > "") Then
    ActiveWorkbook.XmlImport URL:="C:\SymmPiT\SYMDISK.XML", ImportMap:=Nothing,  overwrite:=True, Destination:=Range("$A$4")
    ActiveWorkbook.XmlMaps("SymCLI_ML_Map").Delete
    Set Contents = Worksheets("Disks").Range("A5")
    If Contents.Text = "" Then
        MsgBox "Information" & vbNewLine & vbNewLine & "Disks data file has not imported, too many rows of data for Excel 2003"
    End If
Else
    Range("A4").Select
    ActiveCell.FormulaR1C1 = "No Disk Data file SYMDISK.XML found"
End If
Range("A2").Select

Application.ScreenUpdating = True

ImportLocks:
‘ Code continues here, removed from this post….
Application.ScreenUpdating = True

SaveAsExcelFile:
' SaveAsExcelFile
Section = 43
On Error GoTo SPErrorHandler

SaveName = Worksheets("SymmPiT").Range("F19").Text
' Clear any outstanding error
Err.Clear
' Save output file
ActiveWorkbook.SaveAs Filename:="C:\SymmPiT\" & SaveName & ".xls"
Range("F15").Select