Vba 忽略空的组合框
我有5个组合框,用于过滤列表框。我想让它,所以不是所有的5必须被选中,以使过滤器的工作。每个组合框以空白(“”)开头,我希望能够跳过1个或多个组合框,并使用我选择的组合框进行筛选。以下是其中一个组合框的更新后代码:Vba 忽略空的组合框,vba,ms-access,combobox,ms-access-2007,Vba,Ms Access,Combobox,Ms Access 2007,我有5个组合框,用于过滤列表框。我想让它,所以不是所有的5必须被选中,以使过滤器的工作。每个组合框以空白(“”)开头,我希望能够跳过1个或多个组合框,并使用我选择的组合框进行筛选。以下是其中一个组合框的更新后代码: On Error Resume Next 'These are the comboboxes Me.BilletMaterial.RowSource = [MechanicalData.Billet Material] Me.BilletNumber.RowSo
On Error Resume Next
'These are the comboboxes
Me.BilletMaterial.RowSource = [MechanicalData.Billet Material]
Me.BilletNumber.RowSource = [MechanicalData.Billet Number]
Me.TestType.RowSource = [MechanicalData.Test Type]
Me.Axis.RowSource = [MechanicalData.Axis]
Me.Temperature.RowSource = [MechanicalData.Temperature]
Me.BilletMaterial.Requery
Me.BilletNumber.Requery
Me.TestType.Requery
Me.Axis.Requery
Me.Temperature.Requery
'Listbox
Me.DataView.RowSource = "SELECT [Billet Material],[Billet Number], " & _
"[Specimen],[Temperature],[Modulus],[Ultimate Tensile Strength],[Strain] " & _
"FROM MechanicalData " & _
"WHERE 1=1 " & _
"AND [MechanicalData.Axis] = '" & Me.Axis.Value & "' " & _
"AND [MechanicalData.Test Type] = '" & TestType.Value & "' " & _
"AND [MechanicalData.Temperature] = " & Temperature.Value & " " & _
"AND If (Not IsNull(BilletNumber.Value)) Then [MechanicalData.Billet Number] = " & BilletNumber.Value & " End if " & _
"AND [MechanicalData.Billet Material] = '" & BilletMaterial.Value & "' "
我的第一个想法是在SELECT语句的WHERE部分实现多个“if not empty…”语句,但我不知道如何实现,甚至不知道是否可能
我知道这行的语法是错误的
"AND If (Not IsNull(BilletNumber.Value)) Then [MechanicalData.Billet Number] = " & BilletNumber.Value & " End if " & _
我相信您上面的代码缺少“FROM MechanicalData”子句。使用上面的建议,以下操作应该有效(假设所有combobox值都不是数字): 这应该起作用:
'Listbox
Me.DataView.RowSource = "SELECT [Billet Material],[Billet Number], " & _
"[Specimen],[Temperature],[Modulus],[Ultimate Tensile Strength],[Strain] " & _
"FROM MechanicalData " & _
"WHERE 1=1 " & _
"AND [MechanicalData.Axis] = '" & Nz(Me.Axis.Value, '*') & "' " & _
"AND [MechanicalData.Test Type] = '" & Nz(TestType.Value, '*') & "' " & _
"AND [MechanicalData.Temperature] = " & Nz(Temperature.Value, '*') & " " & _
"AND If (Not IsNull(BilletNumber.Value)) Then [MechanicalData.Billet Number] = " & BilletNumber.Value & " End if " & _
"AND [MechanicalData.Billet Material] = '" & Nz(BilletMaterial.Value, '*') & "' "
您可能需要调整它以获得正确的单引号/双引号,但是使用
Nz(SomeControl.Value,“*”)
绝对是返回所有值的有效方法。为什么不使用
If(非IsNull(组合))构建WHERE字符串,然后strWhere=strWhere&
@Remou在注释中是'strWhere=strWhere',相当于[MechanicalData.Axis]='“&Me.Axis.Value&'”(等)在我的代码中?是的,只需建立where statemet。你可能想从where 1=1
开始,这样其他一切都可以和this=that
@Remou我根据你的建议在我的帖子底部添加了一行代码。我还不太熟悉正确的语法,所以如果你能引导我朝着正确的方向去做,那就太好了非常有帮助。我认为您没有正确地使用字符串连接。它应该看起来像和[MechanicalData.Axis]=“&Me.Axis.Value&”
。不需要单引号。这以前确实有效吗?另外,当我在组合框中检查空值时,我使用了Remou描述的方法(除非我使用如果IsNull(Object.Value)=False那么)FROM子句在我复制粘贴自的代码中。奇怪。我会重新编辑它。另外,这些组合框中有2个是数字。我刚刚将我筛选的表中的列全部更改为文本,每当我从设计视图切换到表单视图时,都会弹出一个对话框,上面写着““条件表达式中的数据类型不匹配”,但随后一切正常属性表中的Rowsource令人不快。我删除了它,一切正常。谢谢!是的,对于任何定义为数字的字段,只需从构建WHERE子句的代码中删除周围的引号。。。
'Listbox
Me.DataView.RowSource = "SELECT [Billet Material],[Billet Number], " & _
"[Specimen],[Temperature],[Modulus],[Ultimate Tensile Strength],[Strain] " & _
"FROM MechanicalData " & _
"WHERE 1=1 " & _
"AND [MechanicalData.Axis] = '" & Nz(Me.Axis.Value, '*') & "' " & _
"AND [MechanicalData.Test Type] = '" & Nz(TestType.Value, '*') & "' " & _
"AND [MechanicalData.Temperature] = " & Nz(Temperature.Value, '*') & " " & _
"AND If (Not IsNull(BilletNumber.Value)) Then [MechanicalData.Billet Number] = " & BilletNumber.Value & " End if " & _
"AND [MechanicalData.Billet Material] = '" & Nz(BilletMaterial.Value, '*') & "' "