2016-04-10 55 views
1

有沒有辦法找出Autofilter已經應用於查詢?訪問VBA獲取當前的自動篩選設置

我不能使用表單,因爲數據庫結構正在改變(我無法做任何事情)。所以使用表格和Me.Filter是可悲的。是否有類似的打開選擇查詢?

我現在正在做什麼,但它讓我感到噁心:

DoCmd.RunCommand acCmdSelectAllRecords 
DoCmd.RunCommand acCmdCopy 

其實我需要運行對過濾查詢另一個查詢。因此:將所有內容粘貼到新表中都可以,將過濾器設置作爲條件列表或SQL語句更好。

任何想法?

+0

@HansUp當您在數據表視圖中,每個字段上都有一個過濾器。像在Excel中一樣。我的用戶會想要使用它,我將不得不檢測他們已經過濾的內容。這是清楚的嗎?我可以添加屏幕截圖。 – vacip

+0

好的,我現在明白了。謝謝。我從來沒有聽說過那種稱爲autofilter的功能。 – HansUp

+1

@HansUp是否有適當的名字?過濾器在我看來很混亂,它被用於Access中的10個東西... – vacip

回答

2

看來你懂得檢查表單的用戶應用過濾器,但不希望使用表單,因爲數據庫模式仍然是不穩定的,這意味着您的查詢的字段集可能會發生變化。

在這種情況下,使用子窗體控件創建一個簡單的容器窗體,並使用查詢作爲子窗體控件的SourceObject

下面是一個簡單的例子與作爲SourceObject命名查詢(qryFoo2)...

? Forms!Form20!Child0.SourceObject 
Query.qryFoo2 

,在不施加用戶濾波器...

? Forms!Form20!Child0.Form.Filter 

? Forms!Form20!Child0.Form.FilterOn 
False 

然後,如果我在我的查詢的文本字段上應用(「開頭爲'h'」)過濾器...

? Forms!Form20!Child0.Form.Filter 
([qryFoo2].[text_field] Like "h*") 
? Forms!Form20!Child0.Form.FilterOn 
True 
+1

工程就像一個魅力,輝煌的解決方案!謝謝! – vacip

1

我也沒有聽說過自動篩選器,我相信Me.Filter返回窗體的任何應用的過濾器(當然除了recordource)。

但是,如果您遇到的情況並非如此,你應該能夠使用記錄集因爲它總是返回的形式顯示當前記錄:

Dim rs As DAO.Recordset 
Set rs = Me.RecordsetClone 

If rs.RecordCount > 0 Then 
    While rs.EOF = False 
     ' Loop rs and do stuff. 
     rs.MoveNext 
    Wend 
End If 

Set rs = Nothing 
+0

謝謝,但問題是我沒有表格。我在數據表視圖中有一個查詢。 – vacip

+0

現在你有一個表格... – Gustav