AutoFilter标准使用数组(错误) – 太大的string?

更新:通过一些额外的testing,我发现:1)255个字符似乎是突破点(字符限制)。 设置字符长度为245的数组的filter工作正常 – 我可以保存并重新打开没有任何错误。 我给数组添加了另一个标准,使长度为262,保存文件,然后得到相同的错误。 2) removed records消息中的工作表是指工作表index ,而不是工作表名称,它的确使用自动过滤来引用工作表。 结束更新

我的问题 – 我已经编写代码来设置数据集的自动AutoFilter基于选定的项目在几个切片机。 有时当我打开文件,我得到的错误(释义): Excel found unreadable content in the workbook. Do you want to repair the file? Excel found unreadable content in the workbook. Do you want to repair the file? 然后popup一个对话框,并说Removed Records: Sorting from /xl/worksheets/sheet2.xml part

代码按devise工作; 数据集反映了切片机中所选的内容(甚至包括许多select)。

我如下设置数组(string数组),然后使用数组来设置条件:

 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个项目。 所以,你可以想象,当最大的切片机中的所有项目被选中时,数组的string长度超过5K字符长…就像我上面提到的,代码按devise工作。 我发现这个线程 ,提到一个字符最大?

我已经尝试在保存/closures工作簿之前删除filter,但这并不总是奏效,而这个文件将会被许多其他人使用。 所以我想知道是否1)任何人有一种方法来解决这个错误的build议,或者2)如果可能有一种方法来完成过滤,而不使用一个非常长的数组… …

任何想法,将非常感激!

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

显然,在使用这个语法时:

 Criteria1:=sArr 

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

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

 Criteria1:=Array(sArr) 

这似乎阻止了Excel的破坏。

在自动过滤之前进行sorting可以帮助您更快,更好地执行自动过滤function