讓我從我沒有經驗豐富的VB開始,一直在絞盡腦汁想出了這件事......我看到了我不能解決的問題似乎把我厚厚的頭骨包裹起來,因爲我是一個新手。微軟Access - 表單列表框選擇作爲報表的數據需求
我有一個表格的數據庫。該表格有2個列表框「List1」和「發票類型」。每個都有獨特的價值。對於每個Unbound Listbox,我有一個「全選」和「清除選擇」按鈕,並且它們可以工作。
我有一個「StartDate」和「EndDate」,它們都適用於所有3個報告按鈕。我已經通過在查詢本身中使用它們作爲標準來完成此操作。
我的報告是「CompleteTransRPT」,「NoPaymentRPT」和「PaidRPT」。每個報告都有一個按鈕,除了通過列表框中選擇的內容之外,所有三個報告都可以工作。
我目前的代碼包括:
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
如何使用兩個列表框選定字段作爲什麼在報告中顯示的要求是什麼? 編輯:這裏是要求一個報表查詢
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