ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

di il
13 risposte

ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

Buongiorno a tutti.
Mi accade una cosa a cui non so dare spiegazione e che collego all'istallazione del programma Acrobat Pro 2020.
In access ho un codice che ha sempre funzionato (avevo istallata una vecchia versione di acrobat 9.0)
Il codice in sostanza crea una mail, vi allega un file, dopodiché con l'istruzione ".display" la visualizza per eventuali modifiche e chiude la function.
La cosa strana che accade con la nuova versione di Acrobat e che l'istruzione "display" sembra non funzionare più correttamente.
Mi spiego meglio.
La procedura crea la mail ma al momento di visualizzarla da errore "operazione non riuscita. impossibile trovare un oggetto".
Tuttavia, anche prima di chiudere la finestra di errore di Microsoft Visual Basic, compare un'altra finestra di avviso di Outlook "salvare le modifiche" e, indipendentemente dalla scelta SI NO ANNULLA, trovo la mail correttamente creata e con gli allegati nella cartella bozze di Outlook.
Se invece tolgo l'istruzione .Display, il codice non va in errore e non crea nelle bozze nessuna mail.
E questo non riesco a capirlo. L'istruzione Display dovrebbe semplicemente visualizzare l'oggetto creato. Perché se la uso il codice va in errore ma crea effettivamente l'oggetto, se non la uso non lo crea affatto ?????
E non dipende dal tipo di allegato PDF. In un'altra funzione lo stesso codice crea ed allega un file XLSX. e ottiene il medesimo errore e comportamento sopra descritto.
E nemmeno dal PC. Anche sul portatile il codice ha dato lo stesso problema dopo l'installazione di Acrobat Pro 2020

Di seguito estratto del codice:

....
DoCmd.OutputTo acOutputReport, "rapporto spese", acFormatPDF, NomeFilePDF, True, ""

Dim strDestinatario As String
Dim appOutlook As New Outlook.Application
Dim mail As Outlook.MailItem

Dim percorsoMAIL As String
percorsoMAIL = "c:\...\modelloMail.OFT"

Set appOutlook = CreateObject("outlook.application")
' strDestinatario = "XXXXXXXXXXXX"
Set mail = appOutlook.CreateItemFromTemplate(percorsoMAIL)
With mail
.To = strDestinatario
.Attachments.Add (NomeFilePDF)
.Subject = "RIMBORSO SPESE "
.Display
End With


Tutto questo ha coinciso con l'istallazione di Acrobat Pro2020 che evidentemente ha creato qualche conflitto che non riesco ad immaginare.
Grazie a chiunque saprà indirizzarmi per la risoluzione del problema.
Sm

13 Risposte

  • Re: ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

    StefanoACC ha scritto:


    ... collego all'istallazione del programma Acrobat Pro 2020.
    ...
    E nemmeno dal PC. Anche sul portatile il codice ha dato lo stesso problema dopo l'installazione di Acrobat Pro 2020
    ...
    Tutto questo ha coinciso con l'istallazione di Acrobat Pro2020 che evidentemente ha creato qualche conflitto che non riesco ad immaginare.
    Prova a guardare nell'Editor di VBA Strumenti - Riferimenti... se c'era qualcosa contrassegnato come mancante.
    Scorri cercando anche Adobe Acrobat o qualcosa che si riferisca a quello, per vedere se c'è la versione vecchia o quella nuova.
    Hai Access a 32 o 64 bit?
  • Re: ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

    Ciao Phil.
    Access è a 64 bit
    La verifica dei riferimenti è stato il mio primo controllo.
    Ma non ho trovato alcuna anomalia. Ho anche provato ad aggiungere alcune librerie riferibili ad Acrobat ma nulla.
    Ho fatto anche un'altra verifica.
    Ho provato a togliere dalla function l'istruzione:
    .Attachments.Add (NomeFilePDF)
    e la mail senza allegato viene correttamente visualizzata. (n.b chiaramente ho già fatto tutti i controlli sul file da allegare e sul puntamento ed è tutto OK)
    Riepilogando.
    - Se tolgo l'istruzione display, la procedura non va in errore ma la mail non viene creata.
    - Se la inserisco il codice va in errore, non visualizza la mail, ma nonostante ciò crea correttamente la mail con tanto di allegati e la salva nelle bozze
    - se tolgo l'istruzione per allegare il file, la function corre e la mail viene visualizzata.

    O c'è qualcosa di così banale che mi sfugge....o sto diventando pazzo.. non trovo una logica...
  • Re: ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

    StefanoACC ha scritto:


    ...
    O c'è qualcosa di così banale che mi sfugge....o sto diventando pazzo.. non trovo una logica...
    Non ho individuato il problema con precisione, quindi sto andando anch'io a tentativi con i suggerimenti. Facciamo finta, per un attimo, che l'installazione di Acrobat Pro 2020 abbia acuito problemi latenti (che ieri mi erano sfuggiti)
    Dim appOutlook As New Outlook.Application
    ...
    Set appOutlook = CreateObject("outlook.application")
    Questa sintassi ha 2 criticità.
    1) l'utilizzo del New in fase di dichiarazione della variabile oggetto
    2) l'assegnazione tipica del latebinding in presenza di un tipo già dichiarato nonché di un oggetto già assegnato.

    Punto 1 = l'utilizzo del New in fase di dichiarazione della variabile oggetto
    Lo trovi anche in esempi ufficiali Microsoft ma in VBA non si deve mai usare. Mai. La spiegazione te la posto pari pari come l'ho trovata, non perché la prenda per buona ad occhi chiusi ma perché non c'è nulla da aggiungere.
    Don't Dim .. As New
    Dim obj As MyClass
    Set obj = New MyClass
    Why write 2 lines when you can just say Dim obj As New MyClass?

    Never Dim anything As New if you're concerned about speed. VB6 will treat such a variable as an auto-instantiated variable. Every time you use it, VB will check if it should be instantiated. This will cost you some extra CPU cycles.
    Fonte: . Lì si parla di Visual Basic ma il concetto vale anche per VBA. Se poi la stessa cosa la trovi scritta in una pietra miliare come "vba developer's handbook" (non ricordo se prima o seconda edizione) c'è bisogno di aggiungere altro? Solo quanto ulteriormente specificato proprio in quest'ultimo: l'unico motivo per usare il New già in dichiarazione è per avere sempre a disposizione nella finestra immediata quell'oggetto pronto all'uso ma è evidente che si sta parlando di situazioni di sviluppo/debug, non di codice da distribuire.
    Il tutto si risolve dividendo in 2 quella riga
    Dim appOutlook As Outlook.Application
    Set appOutlook = New Outlook.Application
    Fatto questo il punto 2 non ha nemmeno bisogno di essere analizzato perché sparisce la necessità di un'ulteriore assegnazione: hai già fatto il Set. Potrai quindi eliminare la riga
    Set appOutlook = CreateObject("outlook.application")
    Prova così e guarda se la situazione migliora.
    Ti sembra di aver letto che il punto 2 non ha nemmeno bisogno di trattazione, vero? L'hai letto, sì, ma non era quello che intedevo fare. Perché se i punti sono 2 bisogna trattarli entrambi.

    Punto 2 = l'assegnazione tipica del latebinding in presenza di un tipo già dichiarato nonché di un oggetto già assegnato.
    Stai mescolando earlybinding e latebinding. E qui permettetimi tutti una piccola divagazione perché questo argomento mi porta inevitabilmente a Gibra che in piena estate 2013 si è preso il disturbo di intervenire in un thread su MasterDrive per spiegare ben bene la cosa dopo che io avevo scritto uno strafalcione (tra l'altro immediatamente corretto da @Alex). Divagazione chiusa, nel senso che sul suo sito è ancora disponibile una comparazione dell'uso dell'earlybinding e del latebinding (seppur in vb.net) che fa sempre comodo vedere a confronto e conoscere, per sfruttare la compilazione condizionale anche in VBA.
    http://nuke.vbcorner.net/Projects/NET/VS2010EarlyLateBindinginVBNETExcel/tabid/111/language/en-US/Default.aspx
    http://nuke.vbcorner.net/Projects/NET/VS2008EarlyLatebindinginVBNETWord/tabid/115/language/en-US/Default.aspx
    Earlybinding
    Dim appOutlook As Outlook.Application
    Set appOutlook = New Outlook.Application
    Latebinding
    Dim appOutlook As Object
    Set appOutlook = CreateObject("Outlook.Application")
    con la possibilità variante sul secondo, con GetObject e l'uso accorto della gestione degli errori, per "agganciarsi" ad un'istanza di Outlook già aperta, questione sulla quale però devo riservarmi di riflettere bene, ho ricordi contrastanti in questo momento.
    In ogni caso, vai di Earlybinding puro, per ora, e guarda se il problema continua a presentarsi.
    Per il latebinding (da preferirsi in distribuzione) dedichiamo eventualmente qualche post ulteriore.
  • Re: ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

    Buongiorno Phil.
    Grazie per il tempo che stai impiegando.

    Purtroppo anche la tua soluzione da il medesimo errore.
    Il codice si blocca sull'istruzione .Display
    Se, ad esempio, la sostituisco con .Save, tutto fila liscio, la sub corre, e trovo la mail memorizzata nella cartella Bozze di Outlook.
    Ma non capisco perché fino all'istallazione di Acrobat pro2020 ha funzionato, ed ora non più.
    Cosa può aver cambiato ? In teoria nulla. il problema, come detto, impatta anche su una sub che non usa allegati PDF

    Forse l'istallazione ha cambiato qualche chiave di registro di Outlook, o qualche autorizzazione di accesso...

    Il codice crea correttamente la mail, ed anche gli allegati di qualsiasi tipo essi siano: infatti se la salvo semplicemente tutto funziona.. Ma se chiedo di visualizzarla....crash...
    E' qualcosa che ha a che fare direttamente con l'istruzione .Display, e con quello che l'istruzione fa quando viene chiamata.
  • Re: ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

    Se fai Save e Display...?
  • Re: ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

    Prima prova che ho fatto…
  • Re: ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

    A precisazione del mio post precedente, altrimenti chi non li legge tutti perde il filo.
    L’anomalia si verifica solo se si cerca di visualizzare tramite codice la mail prima dell’invio,sull’istruzione .Display, ma solo se sono presenti allegati.
    Senza allegati .display funziona e la mail viene visualizzata.
    Se tolgo .Display e sostituisco con .Save la mail viene correttamente creata con gli allegati, quindi non sembrano esserci problemi sugli allegati ( o perlomeno non ci sono problemi sulla corretta creazione e sul puntamento) tant’è che sia quando la procedura va in crash sia quando corre senza l’istruzione display, la mail che si sta creando viene memorizzata in Bozze di outlook con tutti gli allegati
    Riassumendo il problema c’è solo se si cerca di visualizzare una mail che contiene allegati (anche se corretti e presenti). Se la di salva semplicemente tutto funziona
  • Re: ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

    StefanoACC ha scritto:


    ...
    Riassumendo il problema c’è solo se si cerca di visualizzare una mail che contiene allegati (anche se corretti e presenti). ...
    Avrei bisogno però di una conferma su come hai gestito l'automazione, se in late o early binding, così da andare sul sicuro in fase di prova (se ci riesco).
    Che versione di Outlook usi, della suite office in generale?
    Immagino che anche Acrobat Pro 2020 sia a 64bit.
    Hai verificato se ci sono patch da installare, sia per Office-Access-Outlook sia per Acrobat Pro 2020?
    Outlook è già aperto in modo classico (doppio clic da icona, per capirci) quando esegui l'operazione?
    Se togli Acrobat Pro 2020 riprende a filare tutto liscio?
    Macchine virtuali di test a gogo in questi casi!
  • Re: ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

    Ciao Phil.

    Partendo dal la certezza che il problema era stato causato dalla nuova istallazione di acrobat 2020, ho cercato la causa esternamente al codice e, a forza di far prove, credo di aver trovato la soluzione, o almeno sembra.
    La posto per chi avesse problemi analoghi.
    L'anomalia era creata dal componente aggiuntivo COM di Adobe Acrobat PDFMaker Office
    l'ho disattivato e tutto a ripreso a funzionare. Quindi il problema era esterno al codice.
    Ora resta da testare se la disattivazione del componente porterà altri tipi di controindicazione.
    Ho anche provato a fare qualche ricerca e credo che questo articolo possa essere attinente
    https://docs.microsoft.com/it-it/office/troubleshoot/third-party-add-ins/incompatibilities-between-office-and-adobe

    Grazie comunque Phil per la collaborazione
  • Re: ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

    ERRATA CORRIDGE

    Correggo il precedente post: il componente che creava l'anomalia è
    Adobe Document cloud for Microsoft Outllok - Acrobat

    p.s. li avevo disabilitati entrambi, ora li ho abilitati a turno ed ho verificato quello che effettivamente crea il conflitto.
    Grazie
  • Re: ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

    Ma per che motivo hai questi riferimenti nel progetto...?
  • Re: ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

    Ciao Alex
    Quando indico che il problema è esterno al codice, intendo esterno proprio ad Access.
    Forse non sono stato sufficientemente chiaro.
    Il componente aggiuntivo non è nel progetto di Access, ma è stato aggiunto durante l’istallazione di Adobe Acrobat 2020 nei componenti aggiuntivi di Outlook. Evidentemente, quando il codice interagiva con Outlook per creare e visualizzare la mail appena creata, questo componente aggiuntivo creava dei conflitti con il codice e lo mandava in crash…
    Spero ora di essere stato esaustivo
  • Re: ANOMALIA ESECUZIONE CODICE VBA DOPO INSTALLAZIONE ACROBAT PRO 2020

    Scusa avevo capito che tu avessi inserito nel codice i riferimenti a quel componente in modo esplicito.
Devi accedere o registrarti per scrivere nel forum
13 risposte