首页 > 解决方案 > 是否有一种简单的方法来确定打开选项卡中的哪个页面以读取 Access 中的表格?

问题描述

我有一个带有付款选项卡控件的表单。当前、未来和过去的付款有一个单独的页面,每个选项卡都有一个表格,其中有一个名为 ID 的公共字段。

我有一个按钮,可以打开另一个表单,其中包含有关付款的更详细信息,并在查询中使用 ID 来获取数据。

由于每个页面都使用/具有相同的 ID,是否有一种简单的方法来查找 ID,无论打开哪个页面?

我试过了

ID = Forms!TabBills.Pages(TabBills.Value)![ID].Value

标签: vbams-access

解决方案


我会用更动态的方法来做到这一点。

帮助程序

此过程尝试在页面中查找子表单控件。

如果页面中有多个子表单控件,则返回第一个找到的控件。

Private Function FindSubformControlInPage(ByVal pageToCheck As Page) As SubForm
    Dim item As Control
    For Each item In pageToCheck.Controls
        If TypeOf item Is SubForm Then
            Set FindSubformControlInPage = item
            Exit Function
        End If
    Next
End Function

用法

Dim currentSubformControl As SubForm
Set currentSubformControl = FindSubformControlInPage(Me.TabBills.Pages(Me.TabBills.Value))

If currentSubformControl Is Nothing Then
    MsgBox "No subform control in the current page"
    Exit Sub
End If

If currentSubformControl.SourceObject = vbNullString Then
    MsgBox "The current subform control doesn't contain a form."
    Exit Sub
End If

Dim currentSubform As Form
Set currentSubform = currentSubformControl.Form

MsgBox "Found subform: " & currentSubform.Name

更紧凑的用法

这意味着您确定总是有一个子表单控件并且它包含一个表单。

Dim currentSubform As Form
Set currentSubform = FindSubformControlInPage(Me.TabBills.Pages(Me.TabBills.Value)).Form

MsgBox "Found subform: " & currentSubform.Name

获取身份证

最后,拥有正确的(子)表单,您可以访问您的ID字段:

Dim currentID As Long
currentID = currentSubform.Controls("ID").Value

推荐阅读