私はVBで味付けされていないし、これを理解するために私の脳を荒らしている...私は解決策を見た私がそのような初心者であるように、私の厚い頭蓋骨を包むように見える。Microsoft Access - フォームのリストレポートのデータ要件としてのリストボックス
私はフォームを持つデータベースを持っています。フォームには2つのリストボックス "List1"と "請求書タイプ"があります。それぞれ固有の値を持ちます。私はそれぞれの非バインドリストボックスに対して「すべて選択」と「選択をクリア」ボタンがあり、それらは機能します。
3つのレポートボタンのすべてに作用する「StartDate」と「EndDate」があります。これをクエリ自体の基準として使用してこれを達成しました。
私のレポートは「CompleteTransRPT」、「NoPaymentRPT」と「PaidRPT」です。各レポートにはボタンがあり、リストボックスで選択されているものの要件を通過する以外は現在3つすべてが機能しています。
私の現在のコードの構成は次のとおりです。
Private Sub Detail_Click()
End Sub
Private Sub BTNRunReport_Click()
On Error GoTo BTNRunReport_Click_Err
DoCmd.OpenReport "CompleteTransRPT", acViewReport, "", "", acNormal
BTNRunReport_Click_Exit:
Exit Sub
BTNRunReport_Click_Err:
MsgBox Error$
Resume BTNRunReport_Click_Exit
End Sub
Private Sub BTNPaidInvoices_Click()
On Error GoTo BTNPaidInvoices_Click_Err
DoCmd.OpenReport "PaidRPT", acViewReport, "", "", acNormal
BTNRunReport_Click_Exit:
Exit Sub
BTNRunReport_Click_Err:
MsgBox Error$
Resume BTNPaidInvoices_Click_Exit
End Sub
Private Sub DeSelectAllTeams_Click()
Dim varItm As Variant
With TeamName
For Each varItm In .ItemsSelected
.Selected(varItm) = False
Next varItm
End With
End Sub
Private Sub SelectAllTeams_Click()
Dim i As Integer
For i = 0 To Forms!InvoiceReporting!TeamName.ListCount - 1
Forms!InvoiceReporting!TeamName.Selected(i) = True
Next i
End Sub
Private Sub SelectAllInvoices_Click()
Dim i As Integer
For i = 0 To Forms!InvoiceReporting!InvoiceType.ListCount - 1
Forms!InvoiceReporting!InvoiceType.Selected(i) = True
Next i
End Sub
Private Sub DeSelectAllInvoices_Click()
Dim varItm As Variant
With InvoiceType
For Each varItm In .ItemsSelected
.Selected(varItm) = False
Next varItm
End With
End Sub
どのように私は報告書に示されているもののための要件として2つのリストボックスで選択されたフィールドを使用していますか? 編集:ここでの要求に応じて、レポートのクエリーになってしまった
SELECT Almost.[Invoice #], Almost.[Invoice Date], Almost.[Invoice Amount],
Almost.Payment, Almost.Expression AS Due, Almost.[Invoice Type],
Almost.[Invoice Comments], Almost.[Team Name]
FROM Almost
WHERE (((Almost.[Invoice Date]) Between [Forms]![INVOICEREPORTING]![txtBeginDate]
And [Forms]![INVOICEREPORTING]![txtEndDate]));
です:
Option Compare Database
Private Sub Detail_Click()
End Sub
Private Sub BTNRunReport_Click()
On Error GoTo BTNRunReport_Click_Err
'DoCmd.OpenReport "CompleteTransRPT", acViewReport, , strFilter
Dim strFilter As String
Dim lSelCnt As Long
strFilter = ""
strWhere = GetValues(Me.TeamName, "Team Name", lSelCnt)
If lSelCnt >= 1 Then strFilter = strFilter & "(" & strWhere & ")"
lSelCnt = 0
strWhere = GetValues(Me.InvoiceType, "Invoice Type", lSelCnt)
If lSelCnt >= 1 Then
If Len(strFilter) > 0 Then
strFilter = strFilter & " AND (" & strWhere & ")"
Else
strFilter = strFilter & " (" & strWhere & ")"
End If
End If
Debug.Print strFilter
DoCmd.OpenReport "CompleteTransRPT", acViewReport, , strFilter
BTNRunReport_Click_Exit:
Exit Sub
BTNRunReport_Click_Err:
MsgBox Error$
Resume BTNRunReport_Click_Exit
End Sub
Private Sub BTNPaidInvoices_Click()
On Error GoTo BTNPaidInvoices_Click_Err
'DoCmd.OpenReport "PaidRPT", acViewReport, , strFilter
Dim strFilter As String
Dim lSelCnt As Long
strFilter = ""
strWhere = GetValues(Me.TeamName, "Team Name", lSelCnt)
If lSelCnt >= 1 Then strFilter = strFilter & "(" & strWhere & ")"
lSelCnt = 0
strWhere = GetValues(Me.InvoiceType, "Invoice Type", lSelCnt)
If lSelCnt >= 1 Then
If Len(strFilter) > 0 Then
strFilter = strFilter & " AND (" & strWhere & ")"
Else
strFilter = strFilter & " (" & strWhere & ")"
End If
End If
Debug.Print strFilter
DoCmd.OpenReport "PaidRPT", acViewReport, , strFilter
BTNPaidInvoices_Click_Exit:
Exit Sub
BTNPaidInvoices_Click_Err:
MsgBox Error$
Resume BTNPaidInvoices_Click_Exit
End Sub
Private Sub BTNUnPaidInvoices_Click()
On Error GoTo BTNUnPaidInvoices_Click_Err
'DoCmd.OpenReport "CompleteTransRPT", acViewReport, , strFilter
Dim strFilter As String
Dim lSelCnt As Long
strFilter = ""
strWhere = GetValues(Me.TeamName, "Team Name", lSelCnt)
If lSelCnt >= 1 Then strFilter = strFilter & "(" & strWhere & ")"
lSelCnt = 0
strWhere = GetValues(Me.InvoiceType, "Invoice Type", lSelCnt)
If lSelCnt >= 1 Then
If Len(strFilter) > 0 Then
strFilter = strFilter & " AND (" & strWhere & ")"
Else
strFilter = strFilter & " (" & strWhere & ")"
End If
End If
Debug.Print strFilter
DoCmd.OpenReport "NoPaymentRPT", acViewReport, , strFilter
'DoCmd.OpenReport "NoPaymentRPT", acViewReport, "", "", acNormal
BTNUnPaidInvoices_Click_Exit:
Exit Sub
BTNUnPaidInvoices_Click_Err:
MsgBox Error$
Resume BTNUnPaidInvoices_Click_Exit
End Sub
Private Sub DeSelectAllTeams_Click()
Dim varItm As Variant
With TeamName
For Each varItm In .ItemsSelected
.Selected(varItm) = False
Next varItm
End With
End Sub
Private Sub SelectAllTeams_Click()
Dim i As Integer
For i = 0 To Forms!INVOICEREPORTING!TeamName.ListCount - 1
Forms!INVOICEREPORTING!TeamName.Selected(i) = True
Next i
End Sub
Private Sub SelectAllInvoices_Click()
Dim i As Integer
For i = 0 To Forms!INVOICEREPORTING!InvoiceType.ListCount - 1
Forms!INVOICEREPORTING!InvoiceType.Selected(i) = True
Next i
End Sub
Private Sub DeSelectAllInvoices_Click()
Dim varItm As Variant
With InvoiceType
For Each varItm In .ItemsSelected
.Selected(varItm) = False
Next varItm
End With
End Sub
Function GetValues(lstbox As ListBox, lstField As String, lSelectedCnt As Long) As String
Dim varItem As Variant 'Selected items
Dim strWhere As String 'String to use as WhereCondition
Dim strDescrip As String 'Description of WhereCondition
Dim lngLen As Long 'Length of string
Dim strDelim As String 'Delimiter for this field type.
'strDelim = """"
'Loop through the ItemsSelected in the list box.
With lstbox
For Each varItem In .ItemsSelected
If Not IsNull(varItem) Then
'Build up the filter from the bound column (hidden).
strWhere = strWhere & "'" & strDelim & .ItemData(varItem) & strDelim & "',"
lSelectedCnt = lSelectedCnt + 1
End If
Next
End With
'Remove trailing comma. Add field name, IN operator, and brackets.
lngLen = Len(strWhere) - 1
If lngLen > 0 Then
GetValues = "[" & lstField & "] IN (" & Left$(strWhere, lngLen) & ")"
End If
End Function
それは動作しますが、誰もがすべての問題を見ているなら、私に知らせてください。私は、それが将来他の人を助けることができることを希望して、前と後を離れるつもりです...私は基本的に他の人のコードを使用し、異なるサイトからさまざまな投稿をまとめることによって働きました。
を(それはあなたの質問に何らかの関連性のないので)私はそれを助けることができないという理由だけで、私はコメントするつもりです垂直空白とバナーコメント(絶対にゼロの目的を果たす)は非常に気を散らし、コードの可読性を損なうと言います。良いコメントは言うべきである*なぜ*、*ではない* *何が - コードが既に言っているかを文字どおり正確に言うコメントは、悪いコメントです。間違ったコメントは削除する必要があります。 –
「レポートに表示されるものの要件」 - 検索用語は「フィルタ」となります;-)レポートクエリには、これらをパラメータ値とするWHERE句が必要です。そのため、レポートに使用しているクエリを含めることが重要です。 –
神の愛のために、ボタン名を 'Command76'などから意味のあるものに変更してください。 – Andre