Importazione più fogli excel di un unica cartella

di il
4 risposte

Importazione più fogli excel di un unica cartella

Ciao a tutti,

sto usando il codice allegato sotto (trovato in giro sui forum) per importare dati da una cartella excel contenente 115 fogli in una unica tabella Access.

Il codice dovrebbe creare un file "Prova.xlsx" da cui poi posso fare l'import a mano; funziona tutto, l'array contiene i nomi corretti delle schede (provato con il debug.print), finché non arrivo alla riga di importazione (DoCmd): mi risponde "Errore di run-time '3125': Acilia$ non è un nome valido. Verificare che non includa caratteri o punteggiatura non validi e che non sia troppo lungo".

Ora, il nome della cartella è "Acilia" e non "Acilia$", non riesco ad intercettare DOVE viene aggiunta la "$", per questo anche aggiungendo controlli sulla stringa (Replace, etc.) il codice non funziona...

Qualcuno può aiutarmi?
Grazie in anticipo
PdS
Private Sub Comando0_Click()

Dim XlsAPP As Excel.Application
Dim XlsWB As Excel.Workbook
Dim XlsSH As Excel.Worksheet

Dim x As Integer
Dim strNomeFoglio As String
Set XlsAPP = CreateObject("Excel.Application")
Set XlsWB = XlsAPP.Workbooks.Open("C:\Users\Sergio\Documents\Lavori\Merulla\Rev_05\Strade\SITO-Strade-di-Roma_defMODIFICATE.xlsx")

Dim ContaFogli
ContaFogli = (XlsWB.Sheets.Count)

ReDim arrSH(ContaFogli) As String

For x = 1 To ContaFogli
    arrSH(x) = XlsWB.Sheets(x).Name
    Debug.Print arrSH(x)
Next

XlsWB.Close
Set XlsWB = Nothing
Set XlsAPP = Nothing

For x = 1 To UBound(arrSH)
    strNomeFoglio = Replace(arrSH(x), ",", "")
    strNomeFoglio = Replace(arrSH(x), "$", "")
    Debug.Print strNomeFoglio
    DoCmd.TransferSpreadsheet acImport, , strNomeFoglio, "d:\PROVA.xlsx", False, Replace(strNomeFoglio & "!", "$", "")
Next


End Sub

4 Risposte

  • Re: Importazione più fogli excel di un unica cartella

    PiattinoDiSegreti ha scritto:


    ... finché non arrivo alla riga di importazione (DoCmd): mi risponde "Errore di run-time '3125': Acilia$ non è un nome valido. Verificare che non includa caratteri o punteggiatura non validi e che non sia troppo lungo".

    Ora, il nome della cartella è "Acilia" e non "Acilia$",
    ...
    ...
        Debug.Print strNomeFoglio
        DoCmd.TransferSpreadsheet acImport, , strNomeFoglio, "d:\PROVA.xlsx", False, 
    Prova a togliere la virgola dopo il False, forse fa credere a TransferSpreadSheet che tu stia fornendo il parametro Range.
  • Re: Importazione più fogli excel di un unica cartella

    Nel frattempo ho risolto... mancava qualche riferimento.
    Posto il codice esatto, ora funziona e ho creato una bella tabbbbbbelllllona con 28175 record...

    Grazie comunque Phil per il suggerimento, se trovi qualcosa che non va nel codice comunque ogni suggerimento è graditissimo!!!
    PdS

    Private Sub Comando0_Click()
    
    Dim XlsAPP As Excel.Application
    Dim XlsWB As Excel.Workbook
    Dim XlsSH As Excel.Worksheet
    
    Dim x As Integer
    Dim strNomeFoglio As String
    Set XlsAPP = CreateObject("Excel.Application")
    Set XlsWB = XlsAPP.Workbooks.Open("C:\Users\Sergio\Documents\Lavori\Merulla\Rev_05\Strade\SITO-Strade-di-Roma_defMODIFICATE.xlsx")
    
    Dim ContaFogli
    ContaFogli = (XlsWB.Sheets.Count)
    
    ReDim arrSH(ContaFogli) As String
    
    For x = 1 To ContaFogli
        arrSH(x) = XlsWB.Sheets(x).Name
        Debug.Print arrSH(x)
    Next
    
    
    For x = 1 To UBound(arrSH)
        strNomeFoglio = arrSH(x)
        Debug.Print strNomeFoglio
        DoCmd.TransferSpreadsheet acImport, , "Strade", "C:\Users\Sergio\Documents\Lavori\Merulla\Rev_05\Strade\SITO-Strade-di-Roma_defMODIFICATE.xlsx", True, strNomeFoglio & "!"
    Next
    
    XlsWB.Close
    Set XlsWB = Nothing
    Set XlsAPP = Nothing
    
    End Sub
  • Re: Importazione più fogli excel di un unica cartella

    PiattinoDiSegreti ha scritto:


    ...Grazie comunque Phil per il suggerimento, se trovi qualcosa che non va nel codice comunque ogni suggerimento è graditissimo!!!
    Private Sub Comando0_Click()
    
    Dim XlsAPP As Excel.Application
    Dim XlsWB As Excel.Workbook
    Dim XlsSH As Excel.Worksheet
    
    Dim x As Integer
    Dim strNomeFoglio As String
    Set XlsAPP = CreateObject("Excel.Application")
    Set XlsWB = XlsAPP.Workbooks.Open("C:\Users\Sergio\Documents\Lavori\Merulla\Rev_05\Strade\SITO-Strade-di-Roma_defMODIFICATE.xlsx")
    
    Dim ContaFogli
    ContaFogli = (XlsWB.Sheets.Count)
    
    ReDim arrSH(ContaFogli) As String
    
    For x = 1 To ContaFogli
        arrSH(x) = XlsWB.Sheets(x).Name
        Debug.Print arrSH(x)
    Next
    
    
    For x = 1 To UBound(arrSH)
        strNomeFoglio = arrSH(x)
        Debug.Print strNomeFoglio
        DoCmd.TransferSpreadsheet acImport, , "Strade", "C:\Users\Sergio\Documents\Lavori\Merulla\Rev_05\Strade\SITO-Strade-di-Roma_defMODIFICATE.xlsx", True, strNomeFoglio & "!"
    Next
    
    XlsWB.Close
    Set XlsWB = Nothing
    Set XlsAPP = Nothing
    
    End Sub
    Perché passare dall'array e non sfruttare la collection Sheets?
    Mentre approfondivo (almeno per evitare errori macroscopici) ho spulciato e ho visto che appartiene sia alla collection Sheets sia a Worksheets. Sheets può contenere anche Chart, io starei sulla collection Worksheets, a questo punto.
    A naso:
    ...
    For each XlsSH in XlsWB.Worksheets
    strNomeFoglio = xlsSH.Name
    DoCmd.TransferSpreadsheet...
    Forse non si nota nemmeno la differenza ma... se posso fare a meno di un array lo evito. Nota bene: mai fatto una cosa del genere, sono andato ad intuito.
  • Re: Importazione più fogli excel di un unica cartella

    Ciao Phil,
    si in effetti la tua scorciatoia è più efficace. In realtà avevo usato l'array correggendo il codice iniziale che prevedeva l'oggetto sheets.
    L'avevo fatto perché il codice funzionava a metà e il motivo era che in Access mancavano i riferimenti alle librerie di Excel... per cui le ho tentate tutte!
    Quando poi il codice ha ripreso a funzionare, ho lasciato l'array senza preoccuparmene; in ogni caso, il numero massimo di fogli è 145, quindi l'array non è poi così grande e può essere gestito...
    Grazie ancora!
    PdS
Devi accedere o registrarti per scrivere nel forum
4 risposte