4

更新:通过一些额外的测试,我发现: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 个项目。So as you can imagine, when all the items in the largest slicer are selected, the array's string length is over 5K characters long... like I mentioned above, the code works as designed. 我找到了这个线程,它提到了一个字符的最大值?

我已经尝试在保存/关闭工作簿之前删除过滤器,但这并不总是有效,并且该文件将被许多其他人使用。所以我想知道 1)是否有人建议解决此错误的方法,或者 2)是否有办法在不使用非常长的数组的情况下完成过滤......

对此的任何想法将不胜感激!

4

2 回答 2

3

我的一个同事帮我解决了这个问题。

显然在使用这种语法时:

Criteria1:=sArr

Excel 将数组读取为一个长字符串,而不是将其视为包含许多字符串元素的数组。

解决方法是像这样使用Array()函数:

Criteria1:=Array(sArr)

这似乎可以防止 Excel 损坏。

于 2014-07-14T21:44:17.113 回答
0

在自动过滤之前排序将帮助您更快更好地执行自动过滤功能

于 2014-07-03T08:01:40.297 回答