MS Access嵌套子表单引用错误

时间:2015-01-11 23:30:45

标签: vba ms-access

我在表单上的子表单中引用子表单时遇到问题。

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")

的FormView: enter image description here

1 个答案:

答案 0 :(得分:0)

首先,您看起来像使用子数据表。它们与子表单有些不同(因为你不能为它们命名,它们会自动为你命名)。

此外,由于您的按钮采用相同的形式,因此对于最顶层的形式,我们可以使用“me”关键字。这将简化您的代码。

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

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

以上内容将为您提供第一个嵌套子表单中的名称。

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

两件事:

如果这是子数据表(与子表单相反,那么如果此表单从未展开过,那么引用将会中断(子表单不存在)。如果子数据表通常是相同的没有儿童记录。

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

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

请注意,记录返回将是突出显示的行,在您的示例屏幕截图中,我看到两行,并且我没有看到名为[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替换为子表单控件的名称,但正如我所说,这看起来像子数据表,并且非常确定第一个子数据表名为Child0。