【发布时间】:2013-10-03 05:52:11
【问题描述】:
更新:通过一些额外的测试我发现:
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) 是否有办法在不使用非常长的数组的情况下完成过滤...
对此的任何想法将不胜感激!
【问题讨论】:
-
如果您能弄清楚为什么删除过滤器似乎不起作用,可靠,那么也许我们可以调试它?如果这是一个潜在的解决方法,您可以清除
_Close事件上的排序字段(将字符串写入隐藏的工作表或命名范围等),然后使用工作簿_Open事件重新应用它们(从无论您存储它,然后使用Split函数转换为数组。 -
@DavidZemens 谢谢你的想法!我确实尝试使用
Before_Close事件清除过滤器,并且我认为这已经解决了问题,但是唉,错误仍然随机出现。由于错误是如此不一致,我很难调试。过滤器不一定需要在_Open上重新应用,这使事情变得容易一些。 -
@DavidZemens 我做了更多的测试。似乎无论我是否删除过滤器,错误仍然存在。我确实注意到,如果在将数组应用于过滤器后保存工作簿,我只会收到错误消息。我尝试删除过滤条件然后保存(这不起作用),我尝试在保存之前完全删除过滤器,但这也不起作用。我认为也许我需要找到一种不同的方法来按照必要的标准进行过滤......
标签: vba excel excel-2010