vba - 在子表单中设置过滤器

标签 vba ms-access filter subform

我有一个主窗体“属性”,它有两个子窗体,其中一个显示该属性中的房间,另一个显示每个房间中的居住者。

当您更改属性时,房间会在第一个子窗体中发生变化,该子窗体是连续的。当您向下滚动房间子窗体,使新房间处于事件状态时,我希望居住者在第二个子窗体中进行更改。

到目前为止,我已经在“属性”主窗体的当前事件中编写了此内容:

Dim dblRoomID As Double
dblRoomID = Forms.Properties.frmRoomsByPropertySubform.Form.room_id

成功从第一个子表单中提取 Room_ID。

现在我需要使用 Room_ID 在第二个子表单中设置一个过滤器,该子表单当前显示所有属性的所有占用者,但有一个 Room_ID 字段。

我无法获取

Forms.Properies.frmStudentsRoomQuickview.Form.Filter = "[Room_ID]=" & dblRoomID

或 docmd.applyfilter 工作 - 我一直在假设这是因为事件表单需要是“frmstudentRoomQuickview”才能稍后工作 - 但我不明白为什么简单地设置 .filter行不通的。

编辑:我应该添加,我不能在“房间”表单中使用子表单,因为房间表单需要连续。

编辑2:

Private Sub Form_Current()
Dim dblRoomID As Double
    If IsNull(Forms.Properties.frmRoomsByPropertySubform.Form.room_id) Then
        Forms.Properties.frmRoomsByPropertySubform.Visible = False
        Forms.Properties.frmStudentsRoomQuickview.Visible = False
    Else
        Forms.Properties.frmRoomsByPropertySubform.Visible = True
        Forms.Properties.frmStudentsRoomQuickview.Visible = True
        dblRoomID = Forms.Properties.frmRoomsByPropertySubform.Form.room_id
        Call frmStudentsRoomQuickview_Enter(dblRoomID)
    End If

End Sub

Private Sub frmStudentsRoomQuickview_Enter(dblRoomID)
Forms.Properties.frmStudentsRoomQuickview.Filter = "[room_id] = " & dblRoomID
Forms.Properties.frmStudentsRoomQuickview.FilterOn = True
Forms.Properties.frmStudentsRoomQuickview.Requery
Debug.Print Screen.ActiveForm.name
End Sub

我现在收到“过程声明与具有相同名称的事件或过程的描述不匹配”错误

最佳答案

您是否尝试打开过滤器?

Forms.Properies.frmStudentsRoomQuickview.Form.Filter = "[Room_ID]=" & dblRoomID
Forms.Properies.frmStudentsRoomQuickview.Form.FilterOn = True

编辑:

看到您的更新后,我明白了这个问题。问题是您无法将参数传递给 _Enter 事件。你必须做这样的事情:

Dim dblRoomID As Double

Private Sub Form_Current()

    dblRoomID = 0

    If IsNull(Forms.Properties.frmRoomsByPropertySubform.Form.room_id) Then
        Me.frmRoomsByPropertySubform.Visible = False
        Me.frmStudentsRoomQuickview.Visible = False
    Else
        Me.frmRoomsByPropertySubform.Visible = True
        Me.frmStudentsRoomQuickview.Visible = True
        dblRoomID = Me.frmRoomsByPropertySubform.Form.room_id
        DoStudentsRoomQuickViewFilter
    End If

End Sub

Private Sub DoStudentsRoomQuickViewFilter()
    If dblRoomID <> 0 Then
        Me.frmStudentsRoomQuickview.Form.Filter = "[Room_ID] = " & dblRoomID
        Me.frmStudentsRoomQuickview.Form.FilterOn = True
        Me.frmStudentsRoomQuickview.Requery
        Debug.Print Screen.ActiveForm.Name
    End If
End Sub

Private Sub frmStudentsRoomQuickview_Enter()
    DoStudentsRoomQuickViewFilter
End Sub

关于vba - 在子表单中设置过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21109977/

相关文章:

excel - 使用 Vlookup 查找多次出现并找到非空值

javascript - 我无法让 Javascript 中的过滤器工作

http - IIS - 当 url 中有欧洲字符时,请求被 HTTP 过滤器拒绝

mysql - 在vba中合并mysql记录集

Excel 拖/放以获取文件名和路径

json - VBA-Json 解析嵌套 Json

ms-access - MS Access 2010 列表框项目不可选择

ios - 图像过滤

vba - CopyPaste中的应用程序定义或对象定义的错误

javascript - 无法修复网页上的 VBA 爬网错误