更新:通过一些额外的测试,我发现:
1)255个字符确实似乎是断点(字符限制)。使用字符长度为245的数组设置过滤器工作正常 - 我能够保存并重新打开而没有任何错误。我为数组添加了另一个条件,使长度为262,保存文件,然后得到相同的错误。
2)removed records
消息中的工作表引用工作表index
,而不是工作表名称,它确实引用了自动过滤工作表。 结束更新
我的问题 - 我编写了基于多个切片器中所选项目设置数据集AutoFilter
的代码。有时,当我打开文件时,我收到错误(转述):Excel found unreadable content in the workbook. Do you want to repair the file?
然后弹出一个对话框并说Removed Records: Sorting from /xl/worksheets/sheet2.xml part
。
代码按设计工作;数据集反映切片器中选择的任何内容(甚至是许多选择)。
我按如下方式设置数组(字符串数组),然后使用数组设置标准:
If sCache.Name = "Slicer_Test" Then
For Each sItem In ActiveWorkbook.SlicerCaches(sCache.Name).SlicerItems
If sItem.Selected = True Then
ReDim Preserve sArr(0 To sCount)
sArr(sCount) = sItem.Name
sCount = sCount + 1
End If
Next sItem
filterRng.AutoFilter Field:=9, Criteria1:=sArr, Operator:=xlFilterValues
ReDim sArr(0 To 0)
End If
我为每个切片器复制上面的代码。
我认为问题的根源在于三个最大的切片器分别包含27,120和322个项目。所以你可以想象,当选择最大切片器中的所有项目时,数组的字符串长度超过5K字符...就像我上面提到的,代码按设计工作。 I found this thread,它提到了一个字符最大值?
我在保存/关闭工作簿之前尝试删除过滤器,但这并不总是有效,并且此文件将被许多其他人使用。所以我想知道是否1)任何人都有建议解决此错误的方法,或者2)如果可能有办法在不使用非常长的数组的情况下完成过滤......
对此的任何想法将不胜感激!
答案 0 :(得分:2)
我的一位同事帮我解决了这个问题。
显然使用此语法时:
Criteria1:=sArr
Excel将数组读取为一个长字符串,而不是将其视为包含许多字符串元素的数组。
修复方法是使用Array()函数,如下所示:
Criteria1:=Array(sArr)
这似乎可以防止Excel损坏。
答案 1 :(得分:0)
自动过滤之前的排序将帮助您更快更好地执行自动过滤功能