使用数组的自动筛选条件(错误) - 太大的字符串?

时间:2013-09-27 03:23:18

标签: excel vba excel-vba excel-2010

更新:通过一些额外的测试,我发现: 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)如果可能有办法在不使用非常长的数组的情况下完成过滤......

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

2 个答案:

答案 0 :(得分:2)

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

显然使用此语法时:

Criteria1:=sArr

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

修复方法是使用Array()函数,如下所示:

Criteria1:=Array(sArr)

这似乎可以防止Excel损坏。

答案 1 :(得分:0)

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