MS Access 嵌套子窗体引用错误

MS Access Nested Subform reference error

我无法在表单的子表单中引用子表单。

Private Sub Command37_Click()
Dim UMsge As String

Me.Filter = "ID=" & Me.ID
Me.FilterOn = True

UMsge = "Swimmer's Name: " & Forms![Parents]![Swimmers Subform].Form![Memb First Name] & " " & Forms![Parents]![Swimmers Subform].Form![Memb Last Name] & vbCrLf & vbCrLf & "Roster Group: " & Forms![Parents]![Swimmers Subform].Form![Roster Group] & vbCrLf & vbCrLf & "Monthly Fee: " & Format(Forms![Parents]![Swimmers Subform].Form![Parents - Payment subform].Form![GroupMonthlyPrice], "Currency") & vbCrLf & vbCrLf & "Thank You!"

DoCmd.SendObject acSendForm, "Parents", acFormatPDF, Me.Email, , , "Monthly Fees Owed As Of " & DateSerial(Year(Date), Month(Date), Day(Date)), UMsge, True

End Sub

只有这最后一块:

Format(Forms![Parents]![Swimmers Subform].Form![Parents - Payment subform].Form![GroupMonthlyPrice], "Currency")

窗体视图:

首先,您似乎使用了子数据sheet。它们与子表单有些不同(因为您无法命名它们,它们会自动为您命名)。

此外,由于您的按钮是相同的表单,对于最顶部的表单,我们可以使用“我”关键字。这将大大简化您的代码。

假设我们有 3 个嵌套的子表单,我们可以使用以下语法:

strName = Me.Swimmers_SubForm.Form![memb First Name] & " " & _
          Me.Swimmers_SubForm.Form![memb Last Name]

以上将在第一个嵌套子表单中获取名称。

但是,您的下一个子表单看起来非常像 Subdatasheet。

两件事:

如果这是一个子数据sheet(相对于子表单,那么如果这个表单从来没有展开过,那么引用就会中断(子表单不存在)。这通常是如果子数据sheet没有子记录,则相同。

所以你需要(应该)捕获这个错误。

另外,如果这是一个子数据 sheet,那么你不能给子表单控件一个名字——它从 child0 开始,这可能是你的问题。

请注意,记录 return 将是突出显示的行,在您的示例屏幕截图中,我看到两行,但我没有看到名为 [GroupMonthlyPrice] 的列。但是我假设这是您要参考的专栏?或者您想要名为 [月费] 的栏目吗?

所以要引用第三个嵌套形式,语法是这样的:

Me.Swimmers_SubForm.Form!Child0.Form![GroupMonthlyPrice]

所以要分解所有这些,我将使用以下代码:

Dim f       As Form     ' ref to sub form
Dim UMsge   As String

Set f = Me.Swimmers_Subform.Form

UMsge = "Swimmer's Name: " & f![Memb First Name] & " " & f![Memb Last Name] & vbCrLf & _
        "Roster Group: " & f![Roster Group] & vbCrLf & vbCrLf & _
        "Monthly Fee: " & Format(f!Child0.Form![GroupMontlyPrice], "Currency")

上面引用的 "f" 不是必需的,但肯定会使代码更具可读性。

请注意,您可能必须将 child0 替换为子表单控件的名称,但正如我所说,这看起来像一个子数据sheet,而且很确定第一个子数据sheet 被称为 Child0。