2016-04-10 5 views
1

オートフィルタがクエリに適用されたことを確認する方法はありますか?VBAにアクセスすると現在のオートフィルタ設定が取得される

データベース構造が変更されているため、フォームを使用できません(何もできません)。だからフォームとMe.Filterを使用すると悲しいことです。開いている選択クエリに類似したものはありますか?

私が今やっているが、それは私が病気になります:

DoCmd.RunCommand acCmdSelectAllRecords 
DoCmd.RunCommand acCmdCopy 

私は実際にフィルタクエリに対して別のクエリを実行する必要があると思います。したがって、新しいテーブルにすべてを貼り付けることは、条件のリストとしてフィルタ設定を取得すること、またはSQL文を使用する方が良いでしょう。

アイデア?

+0

@ HansUpデータシートビューでは、各フィールドの上部にフィルターがあります。 Excelのように。私のユーザーはそれを使いたいと思うので、フィルタリングしたものを検出する必要があります。これは明確ですか?私はスクリーンショットを追加することができます。 – vacip

+0

OK、今理解しています。ありがとう。オートフィルタと呼ばれるこの機能は以前は聞いたことがありません。 – HansUp

+1

@ HansUpは正しい名前を持っていますか?フィルタは私の意見では混乱しています、それはAccessのような10のもののために使用されています... – vacip

答えて

2

どのようにあなたが知っているようですフォームのユーザーが適用したフィルタを調べますが、データベーススキーマが依然として揮発性であるためフォームを使用したくないため、クエリのフィールドセットが変更される可能性があります。

この場合、サブフォームコントロールを持つ単純なコンテナフォームを作成し、サブフォームコントロールのSourceObjectとしてクエリを使用します。ここで

は、次に適用されていないユーザフィルタ付き

? Forms!Form20!Child0.SourceObject 
Query.qryFoo2 

...

? Forms!Form20!Child0.Form.Filter 

? Forms!Form20!Child0.Form.FilterOn 
False 

私の場合... SourceObjectとして名前付きクエリ(qryFoo2)との単純な例でありますクエリのテキストフィールドに("初めに 'h'")フィルタを適用してください...

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

魅力的な、華麗なソリューションのように動作します!ありがとう! – vacip

1

はどちらが私はオートフィルタのことを聞いていない、と私は、フォームのMe.Filterリターン(もちろんのレコードを除いて、)の任意適用されたフィルタを信じています。あなたはこれがそうではないことを経験した場合

しかし、あなたはそれは常にフォームに表示されている現在のレコードを返すようRecordsetCloneを使用することができるはずです。

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

関連する問題