使用VBA排序记录的Excel损坏

时间:2017-03-24 12:07:17

标签: excel vba

我有一个带有宏的Excel文件,用于过滤记录。运行宏后,我保存并关闭文件。一旦我再次打开文件,它就说文件已损坏:

Excel found unreadable content in '[filename].xls'. 
Do you want to recover the contents of this workbook? 
If you trust the source of this workbook, click Yes.

一旦我点击是,文件就会打开并查看指向我的xml文件,我找到以下内容:

<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <logFileName>error050360_01.xml</logFileName>
    <summary>Errors were detected in file 'C:\xxx\file.xlsb'</summary>
    -<removedRecords summary="Following is a list of removed records:">
        <removedRecord>Removed Records: Sorting from /xl/worksheets/sheet11.bin part</removedRecord>
    </removedRecords>
</recoveryLog>

在Sheet11上,我有以下排序代码:

LastRow = ActiveSheet.Range("A1").Offset(ActiveSheet.Rows.Count - 1, 0).End(xlUp).Row
Range("A3").Select
ActiveWorkbook.Worksheets("AP_PV").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("AP_PV").Sort.SortFields.Add key:=Range("A4:A" & LastRow) _
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("AP_PV").Sort
    .SetRange Range("A3:B" & LastRow)
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

我尝试在Range之前添加条件(&#34; A3&#34;)。选择查看LastRow&gt; 4排除排序,但id没有任何区别。

关于导致腐败的原因以及如何避免腐败的任何想法?

3 个答案:

答案 0 :(得分:2)

我评论这个,只是提供链接,但我还没有50个声誉。

几年前谷歌搜索出现了一个SE线程,提供了大量可能的解决方案:Excel Error: Removed Records: Sorting from /xl/worksheets/sheet10.xml part

最有可能工作的是这个:

Sheets(yoursheetname).Sort.SortFields.Clear

在排序功能之后(或在保存文件之前)放置它,似乎问题应该得到解决。

希望这有效。

答案 1 :(得分:0)

错误告诉它是“ sheet11”,您可以将内容复制到新工作簿中,删除错误工作簿中的工作表,并使用内容创建新工作表

答案 2 :(得分:0)

我在Windows的Office 365 Excel中遇到相同的问题。我将排序应用于工作表对象,但未能在子对象末尾取消分配对象。一旦在子末尾添加了 set ws = none 代码,该问题就不再发生。我还按照前面的建议清除了排序字段,但是只有在添加了解除分配代码之后,这才完全停止。

解除分配始终是一种好习惯。我们经常听到对象超出范围时被丢弃的情况,但这并非总是如此。