2013-09-27 37 views
2

更新:通過一些額外的測試,我發現: 1)255個字符確實似乎是突破點(字符限制)。設置字符長度爲245的數組的過濾器工作正常 - 我可以保存並重新打開,沒有任何錯誤。我給數組添加了另一個標準,使長度爲262,保存文件,然後得到相同的錯誤。 2)removed records消息中的表單引用了表單index,而不是表單名稱,並且它的確使用自動過濾引用表單。 結束更新使用數組的AutoFilter條件(錯誤) - 太大的字符串?

我的問題 - 我已經編寫代碼,根據幾個切片器中的選定項目來設置數據集的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

如果你能弄清楚爲什麼移除這些過濾器似乎無法正常工作,那麼可靠的話,也許我們可以調試它?如果這是一個潛在的解決方法,您可以清除'_Close'事件上的分揀字段(將字符串寫入隱藏的工作表或命名區域等),然後將其重新應用於工作簿「_Open」事件(從字符串中檢索字符串無論存儲在哪裏,然後使用「分割」功能轉換爲數組)。 –

+0

@DavidZemens謝謝你的想法!我確實嘗試使用'Before_Close'事件清除過濾器,並且我認爲已經解決了這個問題,但是,唉,錯誤仍然是隨機出現的。由於錯誤太不一致,所以我很難調試。過濾器不一定需要在'_Open'上重新應用,這使得事情變得更容易一些。 – ARich

+0

@DavidZemens我做了一些更多的測試。看來,不管我是否刪除了過濾器,錯誤依然存在。我確實注意到,如果在將數組應用到篩選器後保存工作簿,我只會遇到錯誤。我嘗試刪除過濾條件,然後保存(這不起作用),我試圖在保存之前徹底刪除過濾器,但這也不起作用。我認爲,也許我需要找到一種不同的方式來按照必要的標準進行過濾...... – ARich

回答

1

一位同事幫我解決這個問題。

顯然,採用這種語法時:

Criteria1:=sArr 

Excel讀取數組作爲一個長字符串,而不是看它是包含許多字符串元素的數組。

解決方法是使用Array()功能,像這樣:

Criteria1:=Array(sArr) 

這似乎是防止Excel腐敗。

0

排序前自動篩選將幫助你更快地執行自動篩選功能和礦山更好