テーブルを取得し、テーブルを再配置して新しいテーブルを形成するコードがあります。少量のデータで動作しましたが、1,000 を超えるレコードで同じコードを実行しようとすると、「スタック領域が不足しています」というエラー 28 が発生します。私のコードをすべてここにコピーすることはしません。サブの再帰に問題があると思います。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
エラーは、おそらく再帰が原因で、「Call NextDonor」と表示されている行にあります。私のコードが何をしようとしているのかを明確にする必要がある場合、または私のコードの他の部分をコピーする必要がある場合は、お知らせください.