【发布时间】:2017-10-27 00:06:39
【问题描述】:
如果过滤后没有记录,如何使用 VBA 禁用 Datagridview 的过滤器?
这是我的第一次尝试:
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
If Me.RecordsetClone.RecordCount = 0 Then
MsgBox ("Kein Datensatz gefunden. Filter wird entfernt.")
Me.Form.FilterOn = False
Me.Form.Requery
End If
End Sub
这是第二次尝试:
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
rs.Filter = Replace(Me.Filter, "[Tabelle1].", "")
Set rs = rs.OpenRecordset()
If rs.EOF Then
Cancel = True
End If
End Sub
在第二个代码中,我收到错误 3061。第一个代码“有效”,但最终不是我需要的。
因为:
我有 3 个表格。 MAIN、Sub1 和 Sub2。
在 MAIN 中是 Sub1 、 Sub2 和单个 TextBox。文本框被称为“psoudoID”。 Sub1 是显示不同记录集详细信息的普通表单,位于 MAIN 的顶部。 Sub1 下方是 Sub2。 Sub2 是一个Datagridview。当用户单击 Sub2 上的记录集时,Sub2 中的 ID“转到”psoudoID 并从那里转到 Sub1。你明白?
现在的问题是,用户可以过滤 Datagrid 中的每一列以找到此处需要的记录集并显示上面的所有详细信息。但是当过滤后datagrid为空时,Sub2不能给psoudoID一个ID等等Sub1不会在MAIN中显示更长的时间。那个地方的屏幕是空的。通过单击网格中的过滤器按钮,Sub1 再次出现在屏幕上。
我想通过单击 MsgBox 的“确定”或自动禁用过滤器,而不是通过单击 gridview 上的过滤器按钮。
希望你能理解我的描述。对不起我的英语不好:-)
谢谢。
蔬菜
【问题讨论】:
-
第一次尝试中的哪一行会产生错误 3061?您是否有理由将
Me.FilterOn设置为False或修改过滤器而不是将Cancel设置为True? (Cancel取消当前过滤器操作并恢复到之前的过滤器(如果有),而Me.FilterOn = False关闭过滤器,Cancel似乎适合您想要的) -
第一个代码有效。但我不能在正确的地方“开火”。错误 3061 出现在第二个代码上。在替换。
-
尝试将
Set rs = rs.OpenRecordset()替换为Dim rsf As Recordset_ Set rsf = rs.OpenRecordSet。这有帮助吗? -
我试过了,还是报错 3061。
-
rs.Filter = Replace(CStr(Nz(Me.Filter, "")), "[Tabelle1].", "")有帮助吗?这样你就可以确保 Replace 得到 3 个字符串并且没有 NULL。
标签: ms-access vba ms-access-2010 filtering