Vba: Come risolvere errore run-time 3070

Anonimo
2017-09-02T05:58:13+00:00

Buongiorno a tutti,

ho creato un database che tra le altre cose, contiene un report dinamico a campi incrociati, aperto da una maschera esterna e con origine dati una query chiaramente a campi incrociati,  .

In fase di progettazione avevo assegnato come nome report "report1" (per velocità) e funzionava tutto benissimo,  ora a conclusione del lavoro ho pensato di rinominare il report usando un'etichetta più consona, chiaramente cambiando tutti i riferimenti ad esso nel codice dei pulsanti che lo aprono, inserendo il nome nuovo.

A questo punto quando attivo l'evento click dei pulsanti che aprono il report mi viene restituito l'errore in oggetto, anche se assegno di nuovo come nome "report1" mi si ripropone l'errore e su debug il motore del database mi evidenzia il comando di apertura report:

DoCmd.OpenReport "report1", acViewPreview.

ci tengo a sottolineare che questo codice prima di rinominare funzionava a meraviglia.

Potrei accontentarmi anche di questo nome perché ho un backup del file ma sono curioso di sapere perché succede questo.

Grazie a tutti. 

Ps: L'errore completo è questo:

Errore di run-time '3070'

Il motore di database di Microsoft Access non riconosce " come espressione o nome di campo valido.

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

10 risposte

Ordina per: Più utili
  1. Anonimo
    2017-09-03T09:26:06+00:00

    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.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-09-03T05:48:01+00:00

    ciao Michele,

    C iao Sandro e buona domenica

    boh, non riesco ad intuire, prova a postare una demo priva di dati sensibile,

    ti metto il link con la demo, ho cercato di renderla quanto più leggera possibile

    Demo errore

    qualcosa di molto banale sfugge.

    Approfitto anche dare un'aggiustatina al codice.

    Perché apri il report in visualizzazione layout?

    Hai ragione! Ma non lo aprivo in layout, quello è solo un errore frutto dei vari tentativi che ho fatto per capire quale era il problema, infatti nel primo post c'è il codice giusto.

    Ciao, Sandro.

    Come sempre grazie.

    Ciao, Michele

    Ps: Non ho capito se c'è un Tag [code]  per i codici e nemmeno come si dividono le citazioni ;-P

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-09-02T11:10:35+00:00

    ciao Michele,

    boh, non riesco ad intuire, prova a postare una demo priva di dati sensibile, qualcosa di molto banale sfugge.

    Approfitto anche dare un'aggiustatina al codice.

    Perché apri il report in visualizzazione layout?

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-09-02T09:37:11+00:00

    Ciao Sandro, ho dato un'occhiata nei parametri ma sembra tutto ok.

    Tuttavia se ho capito bene se era vera l'ipotesi di un'errore di riferimenti la query non dovrebbe funzionare, ma funziona benissimo. ti faccio uno screen per farti capire meglio e ti metto il codice dell'evento click: (la maschera si chiama frmAdmin)


    Private Sub CmdAnteprima_Click()

    If IsNull(cbomese) Then

    MsgBox "Selezionare Mese", vbInformation, "Campo Mese richiesto"

    cbomese.SetFocus

        ElseIf IsNull(cboanno) Then

        MsgBox "Selezionare Anno", vbInformation, "Campo Anno richiesto"

        cboanno.SetFocus

                ElseIf DCount("*", "QryCrosstabVenduto") > 0 Then

                    If CurrentProject.AllReports("RepForMail").IsLoaded Then

                    DoCmd.Close acReport, "RepForMail", acSaveNo

                    End If

    DoCmd.OpenReport "RepForMail", acViewLayout

    Else

    If CurrentProject.AllReports("RepForMail").IsLoaded Then

    DoCmd.Close acReport, "RepForMail", acSaveNo

    End If

      MsgBox "Il report non contiene dati." & vbCrLf & "Prova a selezionare una data diversa", _

        vbInformation + vbOKOnly, "Nessun contenuto"

    End If

    End Sub


    Come sempre grazie.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-09-02T06:49:26+00:00

    ciao Michele,

    supponiamo che il nome di un controllo di una maschera chiamata maschera1 si chiami cboAnno, e che rappresenti il parametro che consente alla pivot di creare le colonne dell'anno.

    Supponiamo che per errore il parametro alla query venga passato come forms!maschera1!cboAnno1, ottengo :

    mi viene più da pensare che ci sia un errore di questo tipo più che il cambio del nome del report, anche perché, da come ci spieghi, rispristinando il nome del report originale il problema si manifesta inesorabilmente.

    Potrebbe essere un problema anche nella definizione del parametro, ricordi la finestra di dialogo dei parametri....?

    Dai un occhio ai riferimenti e alla corretta corrispondenza con i nomi effettivi e facci sapere.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento