Apertura file con libreria mancante.

di il
25 risposte

25 Risposte - Pagina 2

  • Re: Apertura file con libreria mancante.

    Per creare un pdf si può anche usare una stampante. Ci sono diversi software che, una volta installato, si presentano come una stampante virtuale ma invece di stampare generano un pdf. 

    Perche non  usi questo metodo? 

    Ti risolvi il problema delle dipendenze con pdfcreator (che dovrebbe mettere a disposizione un stampante virtuale) e sei indipendente anche dalla libreria. Devi SOLO scegliere la stampante. 

  • Re: Apertura file con libreria mancante.

    Il problema è sempre lo stesso. Non posso io scegliere di installare un software in base alle mie esigenze.

  • Re: Apertura file con libreria mancante.

    09/05/2024 - Antony73 ha scritto:


    Il problema è sempre lo stesso. Non posso io scegliere di installare un software in base alle mie esigenze.

    La policy non ti consente di installare una stampante virtuale ma ti consente di giochicchiare con access scrivendo codice potenzialmente dannoso mettendo a rischio i dati sensibili?

    Mah!

    Prova con un driver virtuale di stampa pdf tipo microsoft pdf o stampa su file a bassa risoluzione.

    Prova a condividere la stampante pdfcreator in rete…

    Per il resto, al buio, posso solo augurarti buona fortuna…

  • Re: Apertura file con libreria mancante.

    Con la stampante virtuale di Microsoft ottengo un file di quasi 1 Mb. Che intendi con stampa su file a bassa risoluzione?

  • Re: Apertura file con libreria mancante.

    08/05/2024 - Antony73 ha scritto:


    Sfrutto gli ActiveX di PDFcreator per stampare il report. Non devo prevedere di utilizzare la relativa libreria? Se all' apertura del front-end su un computer dove il software non è installato è logico che mi viene indicato la mancanza della libreria nelle operazioni di avvio di access. Questo non mi permette di utilizzare il programma. Ovviamente si risolve installando il programma. Ma se questo non è possibile per problemi policy aziendale come faccio?

    Hai letto la mia ultima risposta? C'erano diverse soluzioni per caricare librerie a piacimento in modo dinamico.
    Se sì, cosa non ti è chiaro?

    Poi, qui non sembra che sia il problema di caricare una libreria o “gestire un errore”, quanto più il fatto che tu debba fare un PDF ma non voglia installare nulla che non sia già presente nella macchina e che sia in grado di generare il suddetto PDF.

    A questo punto, scrivi tu il codice VBA che scrive il file PDF binario. Troppo complesso dici? Certo!

    Però senza scrivere tu il file, e senza installare nulla che possa farlo per te, l'unica strada è quella di evitare l'interfacciamento a una libreria e mandare il report a una stampante virtuale, solo che tu dici poi che le dimensioni del PDF non ti piacciono.

    Quindi, riepilogando, chiedi come gestire una casistica in  cui ti manca una libreria, non puoi installarne un'altra, non puoi usare una stampante virtuale, non puoi scrivere direttamente tu il file… 

    Ovviamente, tutte queste restrizioni che di fatto rendono praticamente impossibile trovare una soluzione adeguata vengono fuori gradualmente, in due pagine di discussione, una alla volta, e forse a questo punto ne mancano ancora altre, e senza che si sia vista ancora una riga di codice, sebbene a questo punto risulti superflua viste le premesse.

    Insomma, o si chiarisce una volta per tutte qual è l'obiettivo e tutti i requisiti che devono essere rispettati, oppure il thread in sé non ha senso e sta andando avanti all'infinito senza che venga fornito un feedback sulle soluzioni che ti sono già state date, partendo prima da una situazione (gestire dinamicamente diverse librerie e supportare l'assenza di un riferimento) e finendo apparentemente in un'altra (generare PDF senza installare nulla).

    Siamo in un forum tecnico: per me, come già avevo risposto all'inizio, se si vuole trovare una soluzione è necessario chiarire. Tutto.

  • Re: Apertura file con libreria mancante.

    Scrivo sotto la routine che uso per creare file PDF ricorrendo a PDFCreator:

    Public Sub Stampa_RdP(path_RdP As String, nome_RdP As String, report_RdP As String)
    
    
    Dim pdfjob As Object
    
    Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
    With pdfjob
    
        If .cStart("/NoProcessingAtStartup") = False Then
            MsgBox "Can't initialize PDFCreator.", vbCritical + _
                    vbOKOnly, "PrtPDFCreator"
            Exit Sub
        End If
        
        .cOption("UseAutosave") = 1
        .cOption("UseAutosaveDirectory") = 1
        .cOption("AutosaveDirectory") = path_RdP
        .cOption("AutosaveFilename") = nome_RdP
        .cOption("AutosaveFormat") = 0    ' 0 = PDF
        .cClearCache
    End With
        
    DoCmd.OpenReport (report_RdP)
    
    Do Until pdfjob.cCountOfPrintjobs = 1
        DoEvents
    Loop
    pdfjob.cPrinterStop = False
    
    With pdfjob
        .cCombineAll
        .cPrinterStop = False
    End With
    
    Do Until pdfjob.cCountOfPrintjobs = 0
        DoEvents
    Loop
    pdfjob.cClose
    
    End Sub

    Compreso che non posso gestire l'eccezione di libreria mancante su computer in cui il PDFCreator non è installato, come mi comporto? Era questa la domanda.

    Quale strada è percorribile, fatte le premesse iniziali? Concordo anche sulla considerazione di Andrea riguardo all'uso di codice potenzialmente dannoso.

  • Re: Apertura file con libreria mancante.

    09/05/2024 - Antony73 ha scritto:


    Compreso che non posso gestire l'eccezione di libreria mancante su computer in cui il PDFCreator non è installato, come mi comporto? Era questa la domanda.

    Puoi gestire benissimo questo errore: basta una istruzione On Error Goto… prima della chiamata a CreateObject(), così nel caso fallisca puoi andare al pezzo di codice che ti consente di gestire l'errore e dare un messaggio appropriato, esaminando l'oggetto Err.

  • Re: Apertura file con libreria mancante.

    Prova a mettere in condivisione una stampante pdfcreator di un pc in rete e usi quella.

    Non ho fatto il test ma dovrebbe funzionare.

    Al massimo ti porti dietro i soli driver per la stampa.

    Prova e ci fai sapere.

  • Re: Apertura file con libreria mancante.

    Puoi verificare se la il Riferimento è presente usando questo codice:

    For Each ref In Application.References
    	If (ref.IsBroken) Then
    		sref = ref.Name
    		sref = ref.FullPath
    	End If
    Next ref

    Da li poi decidi se usarla o meno, ciò detto a mio avviso la scelta di usare i Riferimenti in EarlyBinding è sbagliata, e dove non indispensabile e lo è solo se il Modello Oggetti espone Eventi, si deve optare per il LateBinding ovvero associazione tardiva delle LIBRERIE come fai peraltro, in questo modo ti basta controllare se è installato il Sw di dipendenza ed orientare all'uso della funzione nativa.

    Ora va da se che se usi LateBinding non puoi verificare se nelle Reference ci sia una Broken… ma devi verificare se il SW è presente.

  • Re: Apertura file con libreria mancante.

    Ok. Recepisco il suggerimento. Grazie.

  • Re: Apertura file con libreria mancante.

    Considerato che il front-end sarà distribuito sia a coloro che non hanno installato il PDFCreator sia a chi lo ha installato, ho risolto in questo modo:

    Premesso che path_PDFCreator è una costante tipo string globale, prima di avviare una stampa verifico la possibilità di selezionare il reference:

    Public Function Verify_Ref_PDFCreator() As Boolean
    Dim count   As Integer
    Dim ref     As Reference
    
    '--- per verificare la selezione.
    For Each ref In References
        If ref.Name = "PDFCreator" Then
            count = count + 1
        End If
    Next ref
    
    If Len(Dir(path_PDFCreator)) > 0 And count = 0 Then
        Access.References.AddFromFile (path_PDFCreator)
        Verify_Ref_PDFCreator = True
    Else
        Verify_Ref_PDFCreator = False
    End If
    
    End Function

    se true utilizzo PDFCreator per la stampa, se false uso il metodo DoCmd.OutputTo.

    In chiusura della maschera principale ricorrendo all'evento Unload rimuovo il Reference con la seguente Routine:

    Public Sub Remove_Ref_PDFCreator()
    Dim ref     As Reference
    Dim refs    As References
    
    Set refs = Access.References
    For Each ref In refs
    
        If ref.Name = "PDFCreator" Then
            refs.Remove ref
        End If
    
    Next ref
    
    End Sub
Devi accedere o registrarti per scrivere nel forum
25 risposte