+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Access 2016 (64) - Errore di run-time 2501 se tento di salvare un report in PDF.

  1. #1
    L'avatar di zacca62
    zacca62 non è in linea Scolaretto
    Luogo
    Pedaso
    Post
    75

    Access 2016 (64) - Errore di run-time 2501 se tento di salvare un report in PDF.

    Buongiorno a tutti!

    Da una form apro un report non associato (con valori esportati via codice dalla form) che poi vorrei salvare in formato PDF con il comando DoCmd.OutputTo.
    Di seguito il codice:

    codice:
    Private Sub btnSave_Click() 
    Dim strPath As String, strFile As String, sArray, bResult As Boolean
        
        sArray = Array(Me!dVisita, Me!cboPlaces, Me!cboReasons, Me!cboAffi, Me!tRelaz)
        bResult = Not (IsNull(sArray(0)) And IsNull(sArray(1)) And IsNull(sArray(2)) _
                    And IsNull(sArray(3)) And Len(sArray(4)) = 0)
                    
        If Not bResult Then
            Err.Raise CustomErr.CSE09
        Else
            strFile = Me!LName & "_" & Me!FName & "_" & CStr(CLng(Me!dVisita)) & ".pdf"
            If CurrentProject.AllReports("rptRVisita").IsLoaded Then
                DoCmd.Close acReport, "rptRVisita", acSaveYes
            End If
            DoCmd.OpenReport "rptRVisita", acViewReport
            DoCmd.OutputTo acOutputReport, "rptRVisita", acFormatPDF, strFile, False
        End If
    End Sub
    Così come postato il codice funziona perfettamente, ma se aggiungo al nome file il path completo della cartella in cui voglio salvarlo, il report viene aperto ma il file PDF non viene salvato e la procedura va in errore (2501).
    Ho verificato che non ci siano carratteri speciali nel nome del file (ma sono inevitabilmente nell'indicazione del path !!!) e ho altresì verificato di avere i permessi per la creazione del file (ho provato ad indicare
    codice:
    "C:\" & strfile
    ma il risultato è stato lo stesso).

    Un aiuto sarebbe graditissimo.
    Grazie in anticipo.
    zacca62

    L'unica rivoluzione possibile è l'arricchimento della propria conoscenza

  2. #2
    Phil_cattivocarattere non è in linea Scribacchino
    Luogo
    Verona-Mantova
    Post
    1,613
    Quote Originariamente inviato da zacca62 Visualizza il messaggio
    ...
    Così come postato il codice funziona perfettamente, ma se aggiungo al nome file il path completo della cartella in cui voglio salvarlo, il report viene aperto ma il file PDF non viene salvato e la procedura va in errore (2501).
    Evita il salvataggio in C:\ o in altre cartelle in cui in sistema operativo con tutta probabilità, se l'operazione fosse eseguita "a mano", chiederebbe comunque una conferma ulteriore per procedere.
    La prima cosa da fare è creare una variabile che contenga il path completo (intendendo per tale percorso + nomefile con estensione) e immediatamente prima dell'esportazione in pdf fare un Debug.Print.
    Forse manca la "\" tra il percorso e il nome del file oppure ci sono caratteri vietati: per averne un elenco, da una finestra classica di esplora risorse prova a creare una cartella o un file mettendo come nome il doppioapice, quello sopra il tasto 2 della tastiera italiana e compare l'elenco.
    Fatto questo controllo se il problema rimane si può pensare ad altro.

  3. #3
    L'avatar di zacca62
    zacca62 non è in linea Scolaretto
    Luogo
    Pedaso
    Post
    75
    Ti ringrazio per la risposta.
    L'idea di fare una prova salvando il file pdf sotto la directory radice è dovuta al fatto che nel CurrentProject.Path ci sono degli spazi che per eliminare dovrei assegnare a me stesso un altro account con nome diverso (mi sono accorto solo adesso di aver fatto la boiata di nominare l'account con il mio nome spazio cognome).
    Ho notato che, se la procedura viene eseguita senza errori, salva i file sotto la directory C:\.....\Documenti, che è la directory di default evidenziata nelle opzioni del Centro Protezione.
    Ho rivisto il codice e separato le due azioni (apertura report ed esportazione in pdf) assegnandole a due buttons distinti:
    Lo riposto per completezza di esposizione:
    codice:
    Private Sub btnVisuaReport_Click() ' Apre il Report dopo un controllo dati generale
    On Error GoTo ErrHandler
    
        ' .... Codice validazione dati, se fallisce genera un errore ....
    
        If CurrentProject.AllReports("rptRVisita").IsLoaded Then
            DoCmd.Close acReport, "rptRVisita", acSaveNo
        End If
        DoCmd.OpenReport "rptRVisita", acViewReport, , , acHidden
        
        With Reports("rptRVisita")
            !LName = Me!LName
            !FName = Me!FName
            !ISPZona = Me!ISPZona
            !DtVisit = Me!dVisita
            !cboPlace = Me!cboPlaces
            !cboReason = Me!cboReasons
            !cboAffi = Me!cboAffi
            !tRelaz = Me!tRelaz
            .Visible = True
        End With
        Me.SetFocus  ' Segue la gestione errori
    
    Private Sub btnSavePdf_Click() 'Esegue l'esportazione dopo l'apertura
        Dim strPath As String, strFile As Variant ' nell'help del comando Docmd.OutputTo il nome file è di tipo Variant
        
        strPath = "C:\Users\Nome_Cognome\Documents\"
        strFile = Me!LName & "_" & Me!FName & "_" & CStr(CLng(Me!dVisita)) & ".pdf"
        strFile = strPath & strFile
        Debug.Print strFile ' [risultato: C:\Users\Nome_Cognome\Documents\Cognome_Nomecliente_43166.pdf]
    
        DoCmd.OutputTo acOutputReport, Reports!rptRVisita.Name, acFormatPDF, strFile, True
    End Sub
    Per il resto, le prove che suggerisci le ho già fatte tutte e non so dove sbattere la testa ...
    zacca62

    L'unica rivoluzione possibile è l'arricchimento della propria conoscenza

  4. #4
    L'avatar di zacca62
    zacca62 non è in linea Scolaretto
    Luogo
    Pedaso
    Post
    75
    Ho risolto, ho indicato il path così com'è con lo spazio tra nome e cognome e la procedura termina senza errori. Mi sono fatto sviare dai caratteri speciali che evidentemente devono essere evitati nel nomefile ma possono essere presenti nella stringa del path, come del resto è logico che sia. Se ci avessi ragionato un po' su me ne sarei aaccorto prima.
    Meglio tardi che mai e, soprattutto, un sentito grazie a Phil
    zacca62

    L'unica rivoluzione possibile è l'arricchimento della propria conoscenza

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi