2012-08-16 58 views
0

我有一個數據表的頂部行是過濾器,我有一個循環,更改需要在循環內使用哪個過濾器是變量filterColumn每次分配一個新值循環遍歷。Excel宏自動過濾問題與變量

當我嘗試使用filterColumn,以確定哪些過濾器將是我得到一個錯誤

範圍類的

自動篩選方法失敗

ActiveSheet.Range("$U$83:$CV$1217").AutoFilter Field:=filterColumn, Criteria1:="<>"

什麼是「接通」正確的語法,以便使用變量來確定過濾器在哪個字段中?

問題解決我找到了解決方案。我在整個工作表中引用了過濾器列的位置,實際上我應該引用過濾器組中的數字。例如,我想改變的濾鏡位於第84列的'CF'中,但是我想改變的濾鏡是該組中的第64個。

回答

2
Dim filterColumn As Integer 
filterColumn = 2 
ActiveSheet.Range("$U$83:$CV$1217").AutoFilter Field:=filterColumn, _ 
    Criteria1:="<>" 
+0

我試過了,我原本是'Dim filterColumn as int'但它仍然無法工作 – aconnelly 2012-08-16 05:02:00

+0

你可以讓它在沒有使用變量的情況下工作嗎? – 2012-08-16 05:05:27

+0

是的,如果我更改Field:= filterColumn到Field:= 64它適用於第64列中的過濾器。所以這個問題純粹是使用Field:= filterColumn – aconnelly 2012-08-16 05:16:12

1

編輯:我試圖@ HeadofCatering的解決方案,最初它失敗了。然而,我在被引用的列中填充了值,並且它工作正常(我的解決方案在反向條件下也失敗 - 使列標題變爲空白並失敗)。

但是,這並不完全符合我所看到的(也許你已經) - 你可以絕對地將過濾器添加到帶有空白標題的列。然而,有一件事在我看到的失敗中一致 - filterColumn引用了Application.UsedRange之外的列。您可能想要嘗試驗證您所引用的列實際上是否在Application.UsedRange(簡單方法:在即時窗口中運行Application.UsedRange.Select並查看您的列是否已選中)。由於您引用了大量的列,所以有可能沒有超過特定點的值(包括列標題),並且當您指定要過濾的列時,實際上是指定UsedRange以外的某個值。

一個有趣的(這是新的我也一樣),以測試的是採取白紙,在細胞A1B1中值填充,選擇列A:G和手動添加自動篩選 - 這將僅添加過濾器的列A和B(如果您嘗試將濾鏡添加到完全空白的圖紙中,可以找到相關的情況)。

對不起咿 - 沒準這甚至不是你的問題:)


老溶液(當使用上述條件不工作)

我可能是過度使用它,但也嘗試設置表的值(注意我在這裏使用了一個範圍範圍):

Sub SOTest() 

Dim ws As Worksheet 
Dim filterColumn As Integer 

' Set the sheet object and declare your variable 
Set ws = ActiveSheet 
filterColumn = 2 

' Now try the filter 
ws.Range("$A$1:$E$10").AutoFilter Field:=filterColumn, Criteria1:="<>" 

End Sub 
+0

OP表示如果自動過濾器對代碼變量64代碼進行硬編碼,它將工作。引用工作表不是問題。 – 2012-08-16 14:05:56

+0

@HeadofCatering是的,我編輯了我的答案(爲了後代的緣故,留下了舊的/不正確的答案:)) - 我最好的猜測是上面提到的整個Application.UsedRange問​​題,但它就像你說的那樣 - 必須是其他事情。 – RocketDonkey 2012-08-16 14:11:35

+0

不要'認爲usedrange是問題。如果硬編碼64工作,那麼傳遞一個整數變量的值爲64. – 2012-08-16 17:13:24