2017-06-02 38 views
0

私はアクセス可能なフォーム( "F_Filter")を持っています。ここでは、データテーブルをフィルタリングするためのパラメータを示しています。フォームF_Filterには、フィルタリングされたデータテーブルの結果を同じ画面に表示するサブフォームも含まれています。フィルタリングされた結果を含むこのサブフォームの名前は "Child400"です。そのソースオブジェクトは "F_FilterResults"です。サブフォームを新しいウィンドウで開く

サブフォームを新しいウィンドウで開き、フィルタリングされた結果が表示され、2)Excelに結果をエクスポートできるようにしたいと思います。

通常、私はボタンを作成し、次のコード

DoCmd.OpenForm "NameOfForm", acFormDS 

とクリックでイベントを作成することによって、新しいウィンドウでフォームを開くことができるだろう、私が入れたときただし、このコードは、「動作しません。 Child400 "をNameOfFormとして追加します。これは、Child400がサブフォームであり、Accessによって認識されないためです。 私はDoCmd.OpenForm "[F_Filter]![Child400]", acFormDSも役に立たなかった。私はまた、うまく動作するDoCmd.OpenForm "F_FilterResults", acFormDSを試したことに注意してください。ただし、このテーブルには、事前にフィルタリングされた結果しか含まれていません。

答えて

0
DoCmd.OpenForm "F_FilterResults" 

は、正しい形式です。 "Child400"は、サブフォームコントロールの名前です(私は仮定します)。それはあなたが開くことのできる形式ではありません。

次に、サブフォームインスタンスと同じフィルタを適用する必要があります。サブフォームに現在使用しているのと同じメソッドを別のフォームに使用できます。

問題が解決しない場合は、既存のフィルタコードを質問に追加してください。

編集

フォームショーを記録するものの背後にある魔法はありません。これは2つのプロパティによって制御されます。最も簡単な方法は、新しいフォームに単純に取り替えることです。以下のような

何か:

Sub OpenResults() 

    Dim fSub As Form, fNew As Form 

    Set fSub = Me!Child400.Form 

    DoCmd.OpenForm "F_FilterResults", acFormDS 
    Set fNew = Forms!F_FilterResults 

    fNew.RecordSource = fSub.RecordSource ' if you change the RecordSource in your code 
    fNew.Filter = fSub.Filter 
    fNew.FilterOn = fSub.FilterOn 
    fNew.OrderBy = fSub.OrderBy 
    fNew.OrderByOn = fSub.OrderByOn 

End Sub 
+0

私はF_FilterResultsに同じコードを適用しようとしたが、結果は同じではありません。 (私がサブフォームとF_FilterResultsに適用している他のイベントやパラメータはいくつかありますが、これは私の投稿では言及していませんでしたが、これは私が今やっていることに多少複雑で余計なものです)。私はF_FilterResultsに同じコードを適用するとどこがうまくいかなかったのか理解しようと数時間を費やしましたが、運がないのです。そのため、私はChild400サブフォームに表示されているものを表示するための回避策を用意したいだけです。 – Danny

+0

@Danny:編集を参照してください。 – Andre