1

DoCmd.OpenReport関数の背後にあるコンテキストを理解するための支援が必要です。データベーステーブルのすべてのレコードを含むレポートを生成するフォームにボタンがあります。フォームに表示された情報に基づいてのみレポートを生成したい。ウィザードを使用してフォームにコマンドボタンを追加し、概要レポートを生成しました。これが自動化されたVBAです。

Private Sub GenRpt_Click()
On Error GoTo Err_GenRpt_Click
Dim stDocName As String
Dim FrmId As String
stDocName = "Summary v2"
DoCmd.OpenReport stDocName, acPreview
Exit_GenRpt_Click:
Exit Sub
Err_GenRpt_Click:
MsgBox Err.Description
Resume Exit_GenRpt_Click
End Sub

DoCmd.OpenReportの直後のコードにsoimeのような条件付きstaementを挿入するようにサポートされていることは知っていますが、フォームからユーザーIDを渡してレポートをフィルター処理する方法がわかりません。フォームにはユーザーIDを含むテキストボックス「Text31」があり、レポートには結果に対応するテキストボックス「tstUserID」があります。cmdボタンをクリックする前に「Text31」に表示されたユーザーIDのみにレポート結果を制限するにはどうすればよいですか?

4

1 に答える 1

2

何かのようなもの*:

DoCmd.OpenReport stDocName, acPreview,,"UserID=" & Me.Text31

ここで、UserIDは、レポートのレコードソースに含まれる数値フィールドの名前です。

フィールドがテキストデータ型の場合、引用符が必要になります。

DoCmd.OpenReport stDocName, acPreview,,"UserID='" & Me.Text31 & "'"

userIDに内部引用符が含まれる可能性は低いと思われるため、上記は十分に安全である必要があります。可能性が高い場合は、次のようにエスケープする必要があります。

DoCmd.OpenReport stDocName, acPreview,,"UserID='" _
    & Replace(Me.Text31,"'","''") & "'"

WHERE条件を追加すると、クエリのWHEREステートメントと非常によく似た形式になります。


* Openreportの構文は次のように与えられます

DoCmd.OpenReport(ReportName, View, FilterName, _
    WhereCondition, WindowMode, OpenArgs)
于 2012-12-18T13:39:49.647 に答える