我尝试制作一个级联的组合框(4个组合框)以过滤信息并仅查看适当的结果。从这一点来看,我几乎不知道如何声明和如何使用我所拥有的信息,我有一些代码,但没有结果...所有组合都是空的。
我找到了有关如何在组合中单独添加代码的解决方案,但由于条件会更改结果,因此我尝试进行动态过滤。
Private Sub Ctl1_Click()
Dim db As Database
Dim rec As Recordset
Dim AreaFromV As String
Dim AreaToV As String
Dim PolV As String
Dim PodV As String
Dim strSQL As String
Dim strSQLc1 As String
Dim strSQLc2 As String
Dim strSQLc3 As String
Dim strSQLc4 As String
strSQLc1 = "SELECT DISTINCT Seafreights.[Area From]"
strSQLc1 = strSQLc1 & "FROM Seafreights"
strSQLc1 = strSQLc1 & "ORDER BY Seafreights.[Area From];"
If IsNull(strSQLc1) Then
AreaFromV = 0
Me.Requery
Me.[1].RowSource = ""
Me.[1].RowSource = AreaFromV
Else
AreaFromV = strSQLc1
[Forms]![pricelist]![1].RowSource = AreaFromV
Me.Requery
Me.[1].RowSource = ""
Me.[1].RowSource = AreaFromV
End If
'AreaFromV = IIf([Forms]![pricelist]![1] Is Null, 0, [Forms]![pricelist]![1])
strSQLc2 = "SELECT DISTINCT Seafreights.[Area To], Seafreights.[Area From]"
strSQLc2 = strSQLc2 & "FROM Seafreights"
strSQLc2 = strSQLc2 & "WHERE(((Seafreights.[Area From]) = AreaFromV))"
strSQLc2 = strSQLc2 & "ORDER BY Seafreights.[Area To];"
If IsNull(strSQLc2) Then
AreaToV = 0
Me.Requery
Else
AreaToV = strSQLc2
[Forms]![pricelist]![2].RowSource = AreaToV
Me.Requery
End If
'AreaToV = IIf([Forms]![SeaFreight]![2] Is Null, [Forms]![SeaFreight]![2], 0)
strSQLc3 = "SELECT DISTINCT Seafreights.[Port of Loading], Seafreights.[Area From]"
strSQLc3 = strSQLc3 & "FROM Seafreights"
strSQLc3 = strSQLc3 & "WHERE(((Seafreights.[Area From]) = AreaToV))"
strSQLc3 = strSQLc3 & "ORDER BY Seafreights.[Port of Loading];"
If IsNull(strSQLc3) Then
PolV = 0
Me.Requery
Else
PolV = strSQLc3
[Forms]![pricelist]![3].RowSource = PolV
Me.Requery
End If
'PolV = IIf([Forms]![SeaFreight]![3] Is Null, [Forms]![SeaFreight]![3], 0)
strSQLc4 = "SELECT DISTINCT Seafreights.[Port of Discharge], Seafreights.[Area To] "
strSQLc4 = strSQLc4 & "FROM Seafreights"
strSQLc4 = strSQLc4 & "WHERE(((Seafreights.[Area To]) = AreaToV))"
strSQLc4 = strSQLc4 & "ORDER BY Seafreights.[Port of Discharge];"
If IsNull(strSQLc4) Then
PodV = 0
Me.Requery
Else
PodV = strSQLc4
[Forms]![pricelist]![4].RowSource = PodV
Me.Requery
End If
'PodV = IIf([Forms]![SeaFreight]![4] Is Null, [Forms]![SeaFreight]![4], 0)
strSQL = "SELECT Seafreights.[Area From], " & _
"Seafreights.[Area To]," & _
"Seafreights.[Port of Loading]," & _
"Seafreights.[Port of Loading Locodes]," & _
"Seafreights.[Port of Discharge]," & _
"Seafreights.[Port of Discharge Locodes], " & _
"Seafreights.Commodity, " & _
"Seafreights.Curr, " & _
"Seafreights.[20'STD], " & _
"Seafreights.[40'STD/HC], " & _
"Seafreights.Effective, " & _
"Seafreights.Expiration, " & _
"Seafreights.[Not Subject To], " & _
"Seafreights.[Subject to Contract (see Sheets Arbitraries + Inlands and Surch], Seafreights.[Subject to Tariff Charges], " & _
"Seafreights.[GEO from], " & _
"Seafreights.[GEO To], " & _
"Seafreights.[Amend- ment #], " & _
"Seafreights.[Owner Sales Hierarchy], " & _
"Seafreights.[SVC ID]"
strSQL = strSQL & "FROM Seafreights "
strSQL = strSQL & "WHERE (((Seafreights.[Area From])= AreaFromV) " & _
"AND ((Seafreights.[Area To])= AreaToV) " & _
"AND ((Seafreights.[Port of Loading])= polv) " & _
"AND ((Seafreights.[Port of Discharge])= podv)) "
strSQL = strSQL & "ORDER BY Seafreights.[Area From], Seafreights.[Area To], Seafreights.[Port of Loading], Seafreights.[Port of Discharge];"
End Sub
字符串变量不能为null,因此测试null是没有意义的,并且True条件将永远不会处理。测试空字符串。
If strSQLc3 = "" Then
在每个续行末尾用于构建strSQLc1和strSQLc2以及strSQLc3和strSQLc4 SQL语句的分隔符空间:
strSQLc1 = "SELECT DISTINCT Seafreights.[Area From] "
strSQLc1 = strSQLc1 & "FROM Seafreights "
strSQLc1 = strSQLc1 & "ORDER BY Seafreights.[Area From];"
对于strSQL,“ Seafreights。[SVC ID]”之后也需要空格:"Seafreights.[SVC ID] "
对于级联组合框,将代码放在组合框事件中,以根据在另一个组合框中选择的值来设置其RowSource。使用AfterUpdate和/或GotFocus事件。
然后,您需要按钮后面的代码,该按钮使用组合框选择来构建过滤条件以应用于表单或报表。
级联组合框和使用VBA构建动态过滤条件都是常见的主题。Cascading Combo Boxes - Dependent Box is Blankhow to show query results in a datasheet in the same form?