2011-07-07 23 views
0

VBAを使用してレポートのコンテンツを動的に読み込み、作成したコントロールパネルフォームから選択したレポートに応じて、クエリがフィルタされる可能性があります。私はこれらの行をコメントアウトしていた、とコメント解除する場合、それらは、これが「doesnのことを発見 - 私はこのプロジェクトを始めたとき、これは働いていた、今Access 2007 VBA - レポートが再ロードされるまで、レポートフィルタは機能しません。

Private Sub Report_Open(Cancel As Integer) 
    Me.Filter = "VIP=True" 
    Me.FilterOnLoad = True 

:私のReport_Open関数の先頭に

、私はこれを持っていますもう正しく動作します。レポートの読み込み時にフィルタを適用する代わりに、フィルタを動作させるためにレポートを再ロードする必要があります。印刷プレビューに切り替えてレポートビューに戻すか、デザインビューに切り替えてからレポートビューに戻す必要がありますデザインビューでは、選択したフィルタがプロパティペインに表示されます)。

私は、ユーザーがPDFを表示したり、PDFにエクスポートしたり、印刷プレビューで開くことができるコマンドボタンを使用してレポートを読み込んでいます。これらのコマンドのいずれも、フィルタを適用してレポートを開くことはありません。リロードする必要があります。

私はレポートをロードするために使用しているコマンドは、参考のために、以下のとおりです。

If (Action = "View") Then 
    DoCmd.OpenReport "Test", acViewReport 
ElseIf (Action = "PDF") Then 
    DoCmd.OutputTo acOutputReport, "Test", acFormatPDF 
ElseIf (Action = "Print") Then 
    DoCmd.OpenReport "Test", acViewPreview 
End If 

[OK]を、私は、Me.FilterMe.FilterOnLoad仕事をしない理由は分からないすべてのものから以来、I MSDNなどで見てきましたが、うまくいくはずです。それは言われて、私は私が代わりにDoCmd.ApplyFilterを使用できることを考え出し:

'Check if VIP - add filter if necessary 
If (getGlobal(1) = True) Then 
    DoCmd.ApplyFilter , "VIP = True" 
End If 

誰がどんな考えを持っている場合、私はまだ、他の方法は非常に奇妙な行動をされた理由を知りたいのですが...

+2

または、OnOpenイベントで実行しているため、完全なWHERE句でRecordsourceを設定できます。 OnOpenイベントでコードを書いているのであれば、フィルターのプロパティではなくRecordsourceを使うつもりです。 –

答えて

1

として、 @ David-W-Fentonは、Filter式を設定する代わりに、OpenReportでWhereConditionを使用することを提案しました。 WhereConditionには、Filter式に使用していた文字列と同じ文字列を使用できます。

また、WhereConditionとして空の文字列を指定すると、効果はWhereConditionと同じではないので、getGlobal(1)がTrueを返すかどうかにかかわらず、この(テストされていない)コードは機能するはずです。

Dim strWhereCondition As String 
Dim strReport As String 
strReport = "Test" 
If (getGlobal(1) = True) Then 
    strWhereCondition = "VIP = True" 
End If 

Select Case Action 
Case "View" 
    DoCmd.OpenReport strReport, acViewReport, , strWhereCondition 
Case "PDF" 
    DoCmd.OpenReport strReport, acViewReport, , strWhereCondition 
    DoCmd.OutputTo acOutputReport, , acFormatPDF 
Case "Print" 
    DoCmd.OpenReport strReport, acViewPreview, , strWhereCondition 
End Select 

通知はまた、そのDoCmd.OutputToは、ObjectNameの引数を指定せずに、アクティブなオブジェクト...この場合の「テスト」レポートになります使用しています。

関連する問題