Вот как:
Public Sub SetFormAllowAdditions(_
ByVal frm As Form, _
ByVal lngRecordCountMax As Long)
' Limit count of records in (sub)form to that of lngRecordCountMax.
' 2004-10-06, Cactus Data ApS, CPH
'
' Call in (sub)form:
'
' Private Sub LimitRecords()
' Const lngRecordsMax As Long = 5
' Call SetFormAllowAdditions(Me.Form, lngRecordsMax)
' End Sub
'
' Private Sub Form_AfterDelConfirm(Status As Integer)
' Call LimitRecords
' End Sub
'
' Private Sub Form_AfterInsert()
' Call LimitRecords
' End Sub
'
' Private Sub Form_Open(Cancel As Integer)
' Call LimitRecords
' End Sub
Dim booAllowAdditions As Boolean
With frm
booAllowAdditions = (.RecordsetClone.RecordCount < lngRecordCountMax)
If booAllowAdditions <> .AllowAdditions Then
.AllowAdditions = booAllowAdditions
End If
End With
End Sub
Это работает для постоянного максимального кол-записей. Для переменного счетчика, замените эту строку:
Const lngRecordsMax As Long = 5
с:
Dim lngRecordsMax As Long
lngRecordsMax = Nz(Me.Parent![no. of beds].Value, 1)
Кроме того, изменения Текущего события главной формы, как это:
Private Sub Form_Current()
Forms(Me.Name)!NameOfYourSubformControl.Form.LimitRecords
End Sub
и изменить LimitRecords от Частный вспомогательный до Public Function:
Public Function LimitRecords()
У меня проблема после добавления этого кода, если одна запись существует в суб-форме, где кровати все работает нормально, но если добавить новую запись в форме, где номера я не могу добавить любые новые запись в его подформу, потому что текстовых полей вообще нет. – IIlk
Да, я думаю, вам нужно настроить минимальный макс. count от 0 до 1 (см. отредактированный ответ). Также «включить» подчиненную форму при создании новой записи в основной форме (см. Edit, последний абзац). – Gustav
После изменения значения 1 я получил ошибку времени выполнения 2452, введенное выражение имеет неверную ссылку на родительское свойство, указывая на строку lngRecordsMax = Nzl .... Когда я изменил lngRecordsMax на 5, все работает так, как должно. – IIlk