2

テーブルを取得し、テーブルを再配置して新しいテーブルを形成するコードがあります。少量のデータで動作しましたが、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」と表示されている行にあります。私のコードが何をしようとしているのかを明確にする必要がある場合、または私のコードの他の部分をコピーする必要がある場合は、お知らせください.

4

2 に答える 2