Я тоже искал решение. Не удалось найти ни одного, кроме написания запроса на основе кросс-таблицы, а затем суммирования этого запроса и добавления в конец запроса объединения. Поскольку я пытаюсь выполнять все операторы SQL изнутри формы (более управляемой для развертывания), мне не нравится этот подход: написание или повторное заполнение Querydef / представления из кода и т. Д.
Если вы отображаете результаты в подчиненной форме в вашей форме, вы можете сделать следующее:
ниже подчиненной формы, а другая подчиненная форма достаточно короткая, чтобы удерживать только 1
запись.
Привязать элементы управления в форме к функции следующим образом:
control1 = fnADOSum(yourCrosstabfield1, yourCrosstabSQL)
Public Function fnADOSum(fldName As String, strInputSQL As String) As Double
On Error GoTo ERRHANDLER
Dim RS1 As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim StrSQL As String
Dim dblRunTot As Double
Set RS1 = New ADODB.Recordset
RS1.CursorLocation = adUseServer
Set cnn = CurrentProject.Connection
dblRunTot = 0
With RS1
.Open strInputSQL, cnn, adOpenForwardOnly, adLockReadOnly
If Not .EOF And Not .BOF Then
.MoveFirst
Do Until .EOF
dblRunTot = dblRunTot + Nz(.Fields(fldName).Value, 0)
.MoveNext
Loop
End If
.Close
End With
fnADOSum = dblRunTot
'CLEAN UP:
cnn.Close
Set RS1 = Nothing
Set cnn = Nothing
EXITHANDLER:
Exit Function
ERRHANDLER:
'' your own error handling proc
'' LogError err.Number, err.Description
End Function