Una famiglia di sistemi di gestione per database relazionali di Microsoft progettati per semplificare l'uso.
ciao Michele,
c'è un errore logico di impostazione del report.
Hai inserito una serie di textBoxes per ottenere i totali ed il conteggio totale, suppongo, visto che la pivot ragione con il raggruppamento per il conteggio.
Qualora fosse così, ma non ne sono certo, credo sia il caso lasciare questo compito alla query rivedendo il report ed eliminando tutte le textBoxes.
se questo per capirci è l'obbiettivo che vuoi centrare :
procedi con le seguenti modifiche.
modifica la query come segue :
PARAMETERS forms![frmAdmin]![cbomese] Short, forms![frmAdmin]![cboanno] Short;
TRANSFORM Count(tblVenduto.IdProdotto) AS ConteggioDiIdEstensione
SELECT TabProdotti.NomeProdotto, Count(TabProdotti.IdProdotto) AS totaleConteggio
FROM tblCollaboratori INNER JOIN (TabProdotti INNER JOIN tblVenduto ON TabProdotti.[IdProdotto] = tblVenduto.[IdProdotto]) ON tblCollaboratori.IdCollab = tblVenduto.IdCollaboratore
WHERE (((Month([DatA]))=[forms]![frmAdmin]![cbomese]) AND ((Year([DATA]))=[forms]![frmAdmin]![cboanno]))
GROUP BY TabProdotti.NomeProdotto
PIVOT tblCollaboratori.Collaboratore;
elimina questa riga nell'evento su apertura del report :
.Controls("txttot" & i).Visible = False
chiaramente elimina tutte le textBoxes non associate, l'errore che scatutisce è proprio legato alle textBoxes, in quanto il numero dei controlli viene sfalsato dalla presenza delle textBoxes.
inserisci nell'evento rerport Vuoto questo codice, in modo da evitare il conteggio delle righe della query :
Private Sub Report_NoData(Cancel As Integer)
VBA.MsgBox prompt:="Nessuna vendita per il mese selezionato", _
buttons:=vbCritical, _
title:="Informazione"
Cancel = True
End Sub
e di conseguenza rivedi come segue l'evento click del command button che lancia il report :
Private Sub CmdAnteprima_Click()
On Error GoTo errHandler
With Me
If Len(.cbomese & vbNullString) = 0 Then
VBA.MsgBox prompt:="Campo Mese richiesto", _
buttons:=vbCritical, _
title:="Attenzione"
Exit Sub
End If
If Len(.cboanno & vbNullString) = 0 Then
VBA.MsgBox prompt:="Campo Anno richiesto", _
buttons:=vbCritical, _
title:="Attenzione"
Exit Sub
End If
End With
DoCmd.OpenReport "report1", acViewPreview
exitHere:
Exit Sub
errHandler:
With Err
Select Case .Number
Case 2501
Resume Next
Case Else
MsgBox "ERR#" & CStr(.Number) _
& vbNewLine & .Description _
, vbOKOnly Or vbCritical
End Select
End With
Resume exitHere
End Sub
su apertura del report inserisci questo pezzo di codice subito dopo l'istruzione Private Sub Report_Open(Cancel As Integer),
lascia il resto del codice così' come è :
Private Sub Report_Open(Cancel As Integer)
Const strForm As String = "frmAdmin"
If Not CurrentProject.AllForms(strForm).IsLoaded Then
VBA.MsgBox prompt:="Mancano i parametri", _
buttons:=vbCritical, _
title:="Attenzione"
Cancel = True
Exit Sub
End If
On Error GoTo errHandler
'... resto del codice
end sub
manca la gestione dei totali a piè pagina, ma se ti è chiaro ora come il codice su apertura lavora credo non ti sarà difficile implementare questa ultima parte.
Facci sapere.
Ciao, Sandro.