2015-01-11 2 views
0

양식의 하위 폼 내에서 하위 폼을 참조하는 데 문제가 있습니다.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

답변

0

첫째, 보인다. 그것들은 하위 양식과 약간 다릅니다 (이름을 붙일 수 없기 때문에 이름이 자동 지정됩니다).

또한 버튼이 동일한 양식으로되어 있기 때문에 최상위 양식의 경우 'me'키워드를 사용할 수 있습니다. 이렇게하면 코드가 꽤 간단해질 것입니다. 우리가 3 개 중첩 된 하위 형태를 가지고 가정

, 우리는이 구문을 사용할 수 있습니다

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

위의 첫 번째 중첩 된 서브 형태로 당신의 이름을 얻을 것이다.

그러나 다음 하위 양식은 하위 데이터 시트와 매우 유사합니다.

두 가지 :

이 하위 형태와 달리 하위 데이터 시트 (이면이 양식이 확대 않은 경우는 다음, 다음 기준은이 (자식 폼이 존재하지 않는)은 중단됩니다. 종종 하위 데이터 시트가 자식 레코드가없는 경우에 대해 동일합니다.

그래서 당신이 함정 (해야)이 오류가 필요합니다. 또한

,이 하위 데이터 시트 인 경우에, 당신은 하위 폼 컨트롤을 줄 수 이름이 child0부터 시작하여 문제가 될 수 있습니다.

레코드가 강조 표시된 행으로 반환됩니다. 예제 스크린 샷에서는 두 행이 표시되며 [GroupMonthlyPrice]라는 열은 표시되지 않습니다. 그러나 나는 이것이 당신이 참조하기를 원하는 컬럼이라고 생각할 것입니다. 또는 [Monthly Fee] 란을 원하십니까?

는 그래서 3 중첩 된 양식을 참조하는 구문이 될 것이다 : 그래서
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이라고 확신합니다.

+0

답장을 보내 주셔서 감사합니다. "이 양식이 확장 된 적이없는 경우 참조가 중단됩니다 (하위 양식은 존재하지 않습니다)." 오류가 발생하지 않도록 잡아야하는 문제 인 것 같습니다. 나는 그것을 깨닫지 못했다고 믿을 수 없다. – Solarplex

관련 문제