Access 2010 - transferspreadsheet genera (a volte) errore 3027

di il
21 risposte

21 Risposte - Pagina 2

  • Re: Access 2010 - transferspreadsheet genera (a volte) errore 3027

    chief ha scritto:


    ... avevo usato l'earlybinding per la modifica del foglio excel dichiarando le variabili come excel application.
    Quando mi è comparso questo errore, ho scoperto di questo possibile problema e ho cambiato le dichiarazioni usando gli object.
    ...
    A maggior ragione il riferimento alla libreria di Excel non serve: toglilo, può solo creare problemi.
    Fatto questo è normale che i riferimenti alle altre librerie che hai indicato siano automaticamente gestiti da access e compaiano nella versione 16.0.
    Hai codice e/o altro che verifica/sistema in automatico i riferimenti?
    Fai questo ulteriore tentativo, togliendo il riferimento ad Excel, e facci sapere.

    Aggiungo qualche ora dopo, dopo aver approfondito un po' questo

    chief ha scritto:


    Per la cronaca il tool mi crea file XLSB
    Eh, non è cosa da poco (forse)
    Da https://msdn.microsoft.com/en-us/VBA/Access-VBA/articles/acspreadsheettype-enumeration-access
    acSpreadsheetTypeExcel12	9	Microsoft Excel 2010 format
    acSpreadsheetTypeExcel12Xml	10	Microsoft Excel 2010/2013/2016 XML format (.xlsx, .xlsm, .xlsb)
    Sostituisci acSpreadsheetTypeExcel12 con acSpreadsheetTypeExcel12Xml e vediamo cosa succede.
  • Re: Access 2010 - transferspreadsheet genera (a volte) errore 3027

    Ciao e buona nuova settimana

    Philcattivocarattere ha scritto:


    chief ha scritto:


    ... avevo usato l'earlybinding per la modifica del foglio excel dichiarando le variabili come excel application.
    Quando mi è comparso questo errore, ho scoperto di questo possibile problema e ho cambiato le dichiarazioni usando gli object.
    ...
    A maggior ragione il riferimento alla libreria di Excel non serve: toglilo, può solo creare problemi.
    Fatto questo è normale che i riferimenti alle altre librerie che hai indicato siano automaticamente gestiti da access e compaiano nella versione 16.0.
    Hai codice e/o altro che verifica/sistema in automatico i riferimenti?
    Fai questo ulteriore tentativo, togliendo il riferimento ad Excel, e facci sapere....
    No, ci sono comunque tutti i comandi di modifica del file excel post creazione (sono quelli nel codice che avevo postato, funzione modifica_xls)e se tolgo il riferimento alla libreria mi danno errore
    Non posso toglierla

    Philcattivocarattere ha scritto:


    Sostituisci acSpreadsheetTypeExcel12 con acSpreadsheetTypeExcel12Xml e vediamo cosa succede.
    Questo l'ho provato, ora crea un file XLSX
    Ho mandato all'utente la nuova versione del tool, sto aspettando un riscontro

    A presto per un aggiornamento
    Grazie

    Antonio
  • Re: Access 2010 - transferspreadsheet genera (a volte) errore 3027

    chief ha scritto:


    No, ci sono comunque tutti i comandi di modifica del file excel post creazione (sono quelli nel codice che avevo postato, funzione modifica_xls)e se tolgo il riferimento alla libreria mi danno errore
    Non posso toglierla
    Da un post precedente

    chief ha scritto:


    Public Sub modifica_xls(x As String)
    ...
        With xlSheet
    ...
            .Range("A1").Cells.Interior.Pattern = xlSolid
            .Range("A1").Cells.Interior.PatternColorIndex = xlAutomatic
    ...
            .Range("A1").Cells.Interior.ThemeColor = xlThemeColorDark1
    ...
            .Range("B1:K1").Cells.Interior.Pattern = xlSolid
            .Range("B1:K1").Cells.Interior.PatternColorIndex = xlAutomatic
    ...
            .Range("B1:K1").Cells.Interior.ThemeColor = xlThemeColorDark1
    ...
            .Rows(1).HorizontalAlignment = xlCenter
            .Rows(1).VerticalAlignment = xlCenter
        End With
    ...
    
    Perché hai tenuto le costanti della libreria di Excel. Senza il riferimento il codice non sa cosa significa xlSolid, xlAutomatic e via dicendo. Il latebinding vero si fa sostuituendo anche quelle o con i relativi valori o con costanti che dichiari tu, del tipo
    Const cSolid = 1
    Const cAutomatic = -4105
    ...
    Guarda nella guida in linea o con un debug.print i valori, non so nemmeno se quelli che ho scritto sono giusti perché non ho Excel sotto mano. Fatto questo potrai togliere il riferimento alla libreria e sarai libero da ogni vincolo di versione.

    chief ha scritto:


    Philcattivocarattere ha scritto:


    Sostituisci acSpreadsheetTypeExcel12 con acSpreadsheetTypeExcel12Xml e vediamo cosa succede.
    Questo l'ho provato, ora crea un file XLSX
    E come faceva prima a creare un xlsb con il solo uso di DoCmd.TransferSpreadsheet visto che nella variabile app non compare l'estensione del file? Prova ad aggiungergliela. Oppure torna acSpreadsheetTypeExcel12 e vediamo se il latebinding "completo" è sufficiente a risolvere.
  • Re: Access 2010 - transferspreadsheet genera (a volte) errore 3027

    Philcattivocarattere ha scritto:


    Perché hai tenuto le costanti della libreria di Excel. Senza il riferimento il codice non sa cosa significa xlSolid, xlAutomatic e via dicendo. Il latebinding vero si fa sostuituendo anche quelle o con i relativi valori o con costanti che dichiari tu, del tipo
    Const cSolid = 1
    Const cAutomatic = -4105
    ...
    Guarda nella guida in linea o con un debug.print i valori, non so nemmeno se quelli che ho scritto sono giusti perché non ho Excel sotto mano. Fatto questo potrai togliere il riferimento alla libreria e sarai libero da ogni vincolo di versione.
    Ho capito. Purtroppo devo confessare che con quella parte excel sono andato di copia incolla perchè non sono riuscito a trovare uno spicciolo di guida con esempi e sintassi.
    provero con il debug.print o con la finestra immediata per fare tutte le sostituzioni

    Philcattivocarattere ha scritto:


    chief ha scritto:


    Philcattivocarattere ha scritto:


    Sostituisci acSpreadsheetTypeExcel12 con acSpreadsheetTypeExcel12Xml e vediamo cosa succede.
    Questo l'ho provato, ora crea un file XLSX
    E come faceva prima a creare un xlsb con il solo uso di DoCmd.TransferSpreadsheet visto che nella variabile app non compare l'estensione del file? Prova ad aggiungergliela. Oppure torna acSpreadsheetTypeExcel12 e vediamo se il latebinding "completo" è sufficiente a risolvere.
    Non so perchè si è comportato in quel modo.
    Oltretutto, ad aumentare lo sconcerto, con quella modifica a me comunque ha continuato a funzionare, l'ho mandato ad un utente a cui funzionava anche prima, ed ora non gli funziona più
    Stavolta l'errore è:
    External table is not in the expected format

    ufff...


    AGGIORNAMENTO
    ho sostituito le variabili con costanti e ho tolto il riferimento alla libreria
    funziona

    oggi pomeriggio provo su un PC di un utente se il problema è risolto, sia con l'opzione che genera XLSB che quella per XLSX
    Speriamo bene
  • Re: Access 2010 - transferspreadsheet genera (a volte) errore 3027

    Perdonatemi se non mi sono fatto più vivo, ma sono stato piuttosto impegnato

    La prima regola, da me sempre asserita, è quella di comunicare la soluzione, per la soddisfazione di chi ha aiutato e per usi futuri anche di altri utenti.
    Lo faccio ora con un po' di ritardo

    Alla fine la soluzione è stata la seguente, trovata per sbaglio e per un tentativo di disperazione

    Dopo essere ritornato ad usare la costante acSpreadsheetTypeExcel12, anche se direttamente col suo valore 9, ho provato a forzare il salvataggio indicando io l'estensione XLSB invece di aspettare che fosse lui ad inserirla
    Le righe di codice sono diventate quindi le seguenti:
     app = app & "Export " & app1 & " " & Replace(Date, "/", "-") & " " & Replace(Time, ":", "_") & ".xlsb"
    DoCmd.TransferSpreadsheet acExport, 9, "Export", app
    Ha funzionato e per tutti gli utenti non ha dato più problemi

    Trovo comunque che sia uno di quei casi inconcepibili, dove non si capisce perchè c'è stato un problema, perchè usciva fuori un certo tipo di codice di errore e perchè la soluzione trovata ha risolto

    Grazie a tutti coloro che mi hanno dedicato un po' del proprio tempo
  • Re: Access 2010 - transferspreadsheet genera (a volte) errore 3027

    chief ha scritto:


    Alla fine la soluzione è stata la seguente, trovata per sbaglio e per un tentativo di disperazione
    Per sbaglio e per un tentativo di disperazione? non posso non autoquotarmi

    Philcattivocarattere ha scritto:


    E come faceva prima a creare un xlsb con il solo uso di DoCmd.TransferSpreadsheet visto che nella variabile app non compare l'estensione del file? Prova ad aggiungergliela.
    e dimmi se non è quello che hai fatto tu. Non ho quotato la parte della costante ma...

    chief ha scritto:


    Dopo essere ritornato ad usare la costante acSpreadsheetTypeExcel12, anche se direttamente col suo valore 9, ho provato a forzare il salvataggio indicando io l'estensione XLSB invece di aspettare che fosse lui ad inserirla
    Si tratta di tentativi normali quando si deve risolvere un problema, non "da disperazione". Poi anche "il c...aso" aiuta.

    chief ha scritto:


    Trovo comunque che sia uno di quei casi inconcepibili, dove non si capisce perchè c'è stato un problema, perchè usciva fuori un certo tipo di codice di errore e perchè la soluzione trovata ha risolto
    No, non lo è per niente. Si trattava di scrivere tutto in latebinding per non avere problemi con i riferimenti alle librerie. Un riferimento mancante causa problemi impensabili, apparentemente non collegati a quello. Cito spesso, in proposito, il mancato riconoscimento delle funzioni Left, Right, o Sum.
    Lieto ovviamente che tutto si sia risolto.
  • Re: Access 2010 - transferspreadsheet genera (a volte) errore 3027

    Rileggendoti mi rendo conto che quel tentativo che pensavo dovuto ad una mia intuizione, evidentemente mi era rimasto impresso a livello inconscio, seppur non tenuto nella debita considerazione ad un primo passaggio.

    Il latebinding a cui sono passato non ha comunque risolto il problema, e secondo me tutto l'inghippo ancora oggi è inspiegabile, in termini di causa effetto
Devi accedere o registrarti per scrivere nel forum
21 risposte