我在表单上的子表单中引用子表单时遇到问题。
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:
答案 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。