importare tabella da excel



  • importare tabella da excel
    di bonzo1971 (utente non iscritto) data: 19/06/2013 21:53:08

    Ciao a tutti,
    Sono un newbye Ho un problema con il codice VBA per importare i dati da una tabella in Access file excel. Utilizzando Office 2010, ma il lancio del codice mi da un errore:

    Errore di run-time -2147217865 (80040e37) motore di database Microsoft Access non riesce a trovare l'oggetto 'INCONTRI $ A1:I108468.
    Assicurarsi che l'oggetto esista e che il nome e il percorso digitato sia corretto.

    la tabella "Incontri" esiste nel mio file excel e contiene i dati. lo stesso codice l'ho usato per impoortare per altri fogli senza problemi e dati sono stati inseriti nella tabella di access.
    la variabile stringa che viene apssata al codice contiene questo ( e non ci vedo errori!):


    INSERT INTO INCONTRI ([Static_ID], [stage_id], [Stagione], [Numero], [dati], [Ora], [Stato], [Venue_ID], [Serie A]) SELECT * FROM [Excel 12.0; HDR = YES ; DATABASE = C:. Users Admin Desktop prova xml.xlsm] [INCONTRI $ A1: I108468]

    se fosse necessario vi posso mandare via email i files per capire l'errore dove so trova!
    Sto impazzendo nel capire dove si trova l'errore per favore aiutatemi!!!
    Grazie in anticipo a tutte le persone che vorranno darmi una mano a capire dove sbaglio.
    Saluti
    Vincenzo

     
    Sub EXPORT2ACCESS() 
        Dim ultimariga As Long 
        Dim ultimacolonna As Integer 
        Dim foglio, finesel As String 
        strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:TOTALBETTOTALBET_XML_DB.accdb" 
        dbWb = Application.ActiveWorkbook.FullName 
        For i = 1 To 4 
            ultimariga = Sheets(i).Range("A" & Rows.Count).End(xlUp).Row 
            ultimacolonna = Sheets(i).Cells(1, Sheets(i).Columns.Count).End(xlToLeft).Column 
            finesel = Application.ConvertFormula("R" & ultimariga & "C" & ultimacolonna, xlR1C1, xlA1, toAbsolute:=xlRelative) 
            foglio = Application.Sheets(i).Name 
            Set cn = CreateObject("ADODB.Connection") 
            Dim cmd As ADODB.Command 
            dsh = "[" & Application.Sheets(i).Name & "$A1:" & finesel & "]" 
            cn.Open strCon 
            Set cmd = New ADODB.Command 
            cmd.CommandType = adCmdText 
            cmd.CommandText = "Delete * from " & foglio 
            cmd.ActiveConnection = cn.ConnectionString 
            cmd.Execute 
            With Sheets(i) 
                For x = 1 To ultimacolonna 
                    campo = "[" & .Cells(1, x).Value & "]" 
                    If x = 1 Then 
                        stringa = campo 
                    Else 
                        stringa = stringa & ", " & campo 
                    End If 
                Next x 
            End With 
             ''Insert into a table called
            strsql = "INSERT INTO " & foglio & "(" & stringa & ") " 
            strsql = strsql & "SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh 
            Debug.Print strsql 
             ''Execute the statement
            cn.Execute strsql 
        Next i 
    End Sub 



  • di Vecchio Frac data: 21/06/2013 10:04:23

    cit. "la tabella "Incontri" esiste nel mio file excel"
    ---> Dovrebbe esistere un *foglio* con quel nome ("incontri"), non una tabella (supponenedo che tu volessi parlare di range con nome definito).





  • di bonzo1971 (utente non iscritto) data: 22/06/2013 09:18:12

    il probelma l'ho individuato.
    Excel non esporta verso access + di 65.536 righe alla volta......
    Dovorò riscrivere il codice.....
    Grazie a tutti comunque




  • di Vecchio Frac data: 22/06/2013 15:20:53

    Allora sposta il problema da Excel a Access.
    Dovrebbe esserci un metodo di DoCmd che potrebbe aiutarti: .TransferSpreadsheet (consulta la Guida con F1).





  • di bonzo1971 (utente non iscritto) data: 22/06/2013 18:20:15

    infatti stavo facendo propio questo in access il limite non esiste...
    Grazie per il consiglio.
    Ciao
    Vincenzo