我返回了另一个有关MS Access及其VBA环境的问题。
我目前正在MS Access 2016中构建数据库。
主视图headview
有一个组合框viewcombo
和一个子表单listview
。
我需要什么:我希望组合框根据列表视图的选定条目来过滤列表视图。
我做了什么:
Private Sub ViewCombo_AfterUpdate()
On Error GoTo Proc_Error
If IsNull(Me.ViewCombo) Then
Me.ListView.Form.Filter = ""
Me.ListView.Form.FilterOn = False
Else
Dim selectedOption As AccessObject
selectedOption = Me.ViewCombo
Select Case selectedOption
Case selectedOption = "open"
Me.ListView.Form.Filter = "Column1='" & "'"
End Select
End If
Proc_Exit:
Exit Sub
Proc_Error:
MsgBox "Error " & Err.Number & " Setting Filter:" & vbCrLf & Err.Description
Resume Proc_Exit
End Sub
注意:如果Me.ListView.form.Filter = "Column1='" & "'"
的选定条目为viewCombo
,则open
应该为空,可用条目为Open, Closed, ovedue, cancel and "as seleced
但是,Access似乎无法以这种方式工作。如何正确编写select case语句?
修改1:
组合框ViewCombo
的值是手动编写的。根据选择的值,将在ListView
上设置不同的过滤器
示例:
所选值为open
Listview使用以下语句过滤:Column1 is empty
所选值为closed
Listview是用语句Column 1 is not empty, Column 2 contains the value 10
过滤的(10是状态的ID,这些ID是我与之共事的员工给我的,这些是内部员工,对数据库没有意义)
希望有助于弄清情况。
答案 0 :(得分:2)
您将使用组合框而不是组合框的值作为对象,类似于:
If IsNull(Me.ViewCombo.Value) Then
Me.ListView.Form.Filter = ""
Me.ListView.Form.FilterOn = False
Else
Select Case Me.ViewCombo.Value
Case Is "open"
Me.ListView.Form.Filter = "[SomeFieldName] = 'open'" ' or other filter value.
End Select
Me.ListView.Form.FilterOn = True
End If
答案 1 :(得分:0)
我用你们给我的输入解决了这个问题:
Private Sub AuswahlFilter_AfterUpdate()
On Error GoTo Proc_Error
If Me.ViewCombo.Value = "All" Then
Me.ListView.Form.Filter = ""
Me.ListView.Form.FilterOn = False
Else
Select Case Me.ViewCombo.Value
Case Is = "Open"
Me.ListView.Form.Filter = "FlagOpenClosed='1'"
Me.ListView.Form.FilterOn = True
End Select
End If
Proc_Exit:
Exit Sub
Proc_Error:
MsgBox "Error " & Err.Number & " when creating Filter:" & vbCrLf & Err.Description
Resume Proc_Exit
End Sub
我在ListView上创建了一些其他列。现在基于表listview
的其他列中填充了When(IsNull(Column1);1;0)
之类的语句中的值。然后,为这些值设置过滤器。
我想有一种更好的方法,但是,我在VBA中是菜鸟,所以这是我想到的最好的解决方案。如果有更好的方法,请在这里写下答案,我很高兴学习新事物,也很乐意听到你们的来信。
-Ninsa