У меня есть код, который берет таблицу и переставляет таблицу для формирования новой таблицы. Он работал с небольшим количеством данных, но теперь, когда я попытался запустить тот же код с более чем 1000 записями, он получает ошибку 28, которая «вне пространства стека». Я не буду копировать весь мой код здесь, потому что это было бы слишком много, и я думаю, что это не нужно, если вы не подумаете иначе. Я думаю, что это проблема с моей рекурсией sub. Мне нужно это, потому что DONOR_CONTACT_ID может иметь только 4 получателя, если он больше, то он должен создать новую запись с тем же DONOR_CONTACT_ID и заполнить получателей.Как исправить ошибку «из пространства стека»?
Вот подпрограмма, которая получает ошибку:
Sub NextDonor()
With rstOutput
.FindNext "[DONOR_CONTACT_ID] = " & strDonor2
'Find the next record in T_OUTPUT with that DONOR_CONTACT_ID
If .NoMatch Then
'If there are no more records with that DONOR_CONTACT_ID, add a new one
.AddNew
!DONOR_CONTACT_ID = strDonor1
!RECIPIENT_1 = strRecip1
!ORDER_NUMBER = strOrderNum1
.Update
Else
'A second DONOR_CONTACT_ID in T_OUTPUT exists. Check to see if all fields are filled.
If !DONOR_CONTACT_ID = strDonor2 Then
If IsNull(!RECIPIENT_2) And Not (IsNull(!RECIPIENT_1)) Then
'RECIPIENT_2 is empty, so populate it
.Edit
!RECIPIENT_2 = strRecip1
.Update
ElseIf IsNull(!RECIPIENT_3) And Not (IsNull(!RECIPIENT_2)) Then
'RECIPIENT_3 is empty, so populate it
.Edit
!RECIPIENT_3 = strRecip1
.Update
ElseIf IsNull(!RECIPIENT_4) And Not (IsNull(!RECIPIENT_3)) Then
'RECIPIENT_4 is empty, so populate it
.Edit
!RECIPIENT_4 = strRecip1
.Update
ElseIf Not IsNull(!RECIPIENT_4) Then
'RECIPIENT_4 is filled, so run this function again
Call NextDonor
End If
End If
End If
End With
End Sub
Ошибки в строке, где он говорит: «Позвоните NextDonor», вероятно, из-за рекурсии. Если вам нужно, чтобы я уточнил, что мой код пытается сделать, или если вы хотите, чтобы я копировал другие части моего кода, просто дайте мне знать.