AutoFilter 「讀出」Criteria的判別式
- 帖子
- 11
- 主題
- 4
- 精華
- 0
- 積分
- 21
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- office2011
- 閱讀權限
- 10
- 性別
- 男
- 註冊時間
- 2011-5-5
- 最後登錄
- 2015-6-27
|
AutoFilter 「讀出」Criteria的判別式
一般常見的都是寫入criteria後進行篩選
譬如要篩選C欄是"甲"或"乙"或"丙"的儲存格
vba語法會是 Column("C:"C").Autofilter field:=1,Criteria1:=Array("甲","乙","丙")
現在我需要的是我有很多欄要進行篩選,
我想把篩選的條件紀錄下來,
之後在其他有同樣欄位的sheet用這些criteria進行篩選
下面語法除了篩選「時間」外運行都ok
思路:
先創建一陣列A,用來儲存每欄的篩選條件
1.先判斷該欄是否有篩選
2.如果是,再判斷Criteria1是否是陣列
若是陣列,則表示篩選數量>=3且criteria2無定義,
=>把criteria1讀入陣列A
3.如果criteria1不是陣列,則篩選數量不是1就是2,
接著判斷1或2的方法是利用operator,如果operator是0,表示篩選數量是1
4.else就一定是篩選數量=2,此時criteria1和criteria2各儲存一個值- Sub 篩選條件()
- Range("A1:C10").Autofilter '對A1至C10進行篩選
- Dim ConditionArray(1 to 3) '創一陣列,儲存每欄的篩選條件
- With Range("A1:C10").Autofilter
- For i=1 to .Filters.Count '逐欄判斷
- If .Filters(i).On Then '判斷該欄有無篩選
- If isarray(.Filters(i).Criteria1) Then
- ConditionArr(i)=.Filters(i).Criteria1 '該欄篩選數量>=3,以陣列方式存入ConditionArr
- End if
- Elseif .Filters(i).Operator Then '如果是0(篩選數量=1)則返回false
- ConditionArr(i)=.Filters(i).Criteria1
- Else
- Dim temp(1 to 2) '創一暫存陣列,讓條件1和2存成陣列
- temp(1)=.Filters(i).Criteria1
- temp(2)=.Filters(i).Criteria2
- ConditionArr(i)= temp 將暫存陣列存入ConditionArr陣列
- End if
- Next
- End with
- End sub
複製代碼 之後再讀出即可- For i = 1 To 3
- If IsEmpty(CondiArr(i)) Then GoTo Jump
- If IsArray(CondiArr(i)) Then
- ReDim RedoArr(1 To UBound(CondiArr(i)))
- For j = 1 To UBound(CondiArr(i))
-
- RedoArr(j) = Mid(CondiArr(i)(j), 2, Len(CondiArr(i)(j)) - 1) '去除等號
- Next j
- ActiveSheet.Range(Cells(1, 1), Cells(Last_row, LC2)).AutoFilter Field:=i, Criteria1:=RedoArr, Operator:=xlFilterValues
- Else
- ActiveSheet.Range(Cells(1, 1), Cells(Last_row, LC2)).AutoFilter Field:=i, Criteria1:=CondiArr(i), Operator:=xlFilterValues
- End If
- Jump:
- Next
複製代碼 我遇到的困難是,如果有某一欄是時間,
且時間譬如篩5月和6月,
這樣在一開始判斷isarray的criteria1時,會出現criteria1應用程式錯誤
且透過criteria2監看式,會發現criteria2也是應用程式錯誤
但透過錄製巨集(錄製篩選時間)會發現時間欄都存在criteria2
要如何才能把篩選時間的條件儲存下來呢? |
|
MPEG
|
|
|
|
|
- 帖子
- 11
- 主題
- 4
- 精華
- 0
- 積分
- 21
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- office2011
- 閱讀權限
- 10
- 性別
- 男
- 註冊時間
- 2011-5-5
- 最後登錄
- 2015-6-27
|
2#
發表於 2015-6-19 13:02
| 只看該作者
回復 1# mpegwmvavi
QQ",都沒人回
我自己做了個檔案(無時間的欄位篩選,和有時間的欄位篩選)
"篩選1"的工作表運行都ok
可以順利讀出篩選條件,並輸出篩選條件在"輸出篩選條件1"這個sheet
"篩選2"的工作表把第四欄換成時間
在要讀出篩選條件的時候,會出錯
出錯的語句截圖如下
http://iamjo.myweb.hinet.net/Error image.PNG
透過監看式可以得知程式跑到時間這一欄時,criteria1和2都沒有存取任何值
有人知道怎麼讀出時間的篩選條件嗎
希望有高手指點一下,謝謝
檔案:
(一直不能上傳excel,我放在我的空間裡)
http://iamjo.myweb.hinet.net/Autofilter.xls |
|
MPEG
|
|
|
|
|
- 帖子
- 11
- 主題
- 4
- 精華
- 0
- 積分
- 21
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- office2011
- 閱讀權限
- 10
- 性別
- 男
- 註冊時間
- 2011-5-5
- 最後登錄
- 2015-6-27
|
3#
發表於 2015-6-19 13:33
| 只看該作者
回復 2# mpegwmvavi
找到外國相關的帖子,發問者和我遇到一模一樣的問題XD
http://answers.microsoft.com/en-us/office/forum/office_2007-customize/autofilter-criteria-with-xlfiltervalues-and-dates/90da7c5a-c813-4182-9849-c57ab72dac63
錄製篩選時間欄會發現,篩選的條件儲存在criteria2
但是卻無法把criteria2讀進另一個陣列儲存起來
會出現應用程式錯誤1004
帖子到最後也是無解...
希望版主群能幫幫我啊~~:'(
謝謝 |
|
MPEG
|
|
|
|
|