Newsgroup: it.comp.appl.access
Titolo: importare dati xls

buongiorno,
uso acces 2003
vorrei fare queste cose via codice vbs
cancellare tutti i dati di una tabella di acces,
compattare il database
importare i dati da xls  nella tabella appena cancellata,
da notare che essendo le righe maggiori di 65536, nel foglio di excel ci 
sono piu fogli quindi l'importazione la si deve fare accodando i dati 
del foglio 1 poi del foglio2 poi del foglio 3
grazie

 ha scritto nel messaggio 
news:erjonj$fug$1...@tdi.cu.mi.it...

Io un po' di tempo fa avevo risolto nel seguente modo.
1) Provo a cancellare la tabella deputata a contenere le righe del foglio 
excel.
2) Non saprei come fare a compattare il database mentre ho acquisito le 
tabelle di lavoro, ma non mi interessa più di tanto perchè è una cosa che 
viene fatta ad ogni uscita dall'applicazione.
3) Questo codice mi riempiva la tabella coi dati di Excel, che poi andavo a 
trattare, copiandoli opportunamente nella tabella di lavoro vera e propria.
    Dim Tabella As String
    Tabella = "T 5000 Dati del foglio Excel importato"
    Codicinonerrore = "7874;"
    Erroreoccorso = 0
    DoCmd.DeleteObject acTable, Tabella
' (Codicinonerrore ed Erroreoccorso servono alla routine di gestione 
dell'errore per fare andare avanti il programma se la tabella non esiste)
    Dim FoglioExcel As String
    FoglioExcel = Me.FoglioElettronico
    DoCmd.TransferSpreadsheet acImport, , Tabella, _
            FoglioExcel, False, Me.CartelladelFoglio & "!"
' (La routine è piuttosto generalizzata, quindi si aspetta che da un'altra 
parte siano stati opportunamente impostati i campi me.foglioelettronico ed 
me.cartelladelfoglio. Se tu conosci già questi parametri puoi andarli a 
valorizzare direttamente. Col parametro False ho scelto di non considerare 
il primo rigo come intestazione del foglio, così è più generalizzato e 
provvedo poi io eventualmente a scartare il primo record. Se non metti il 
nome della cartella seguito dal punto esclamativo, la funzione 
transferspreadsheet ti importa solo la prima cartella, di solito "Foglio1")
    Codicinonerrore = ""
'Stop
    dim dbs as database, tdfs as tabledefs
    Set dbs = CurrentDb
    Set tdfs = dbs.TableDefs
    Dim tdfx As TableDef, rstx As Recordset
    Set tdfx = tdfs(Tabella)
    Set rstx = tdfx.OpenRecordset(dbOpenDynaset, dbSeeChanges)
    If rstx.EOF Then
        MsgBox "La cartella del foglio elettronico risulta priva di dati." _
                , , Titoloapplicazione
        Exit Sub
    End If
    rstx.MoveLast
    Quantrecorddaimportare = rstx.RecordCount
    If Me.Opzioneprimariga = "1" Then Quantrecorddaimportare = 
Quantrecorddaimportare - 1
    Risposta = MsgBox("Saranno generati " & Quantrecorddaimportare & " 
documenti." & _
                vbCrLf & "Confermi di voler proseguire ?", vbYesNo + 
vbDefaultButton1, _
                Titoloapplicazione)
' (Questo controllo l'ho messo perchè alcuni fogli che sembravano essere di 
100-200 righe venivano considerati di 30000-40000 records. Evidentemente 
qualcuno aveva involontariamente valorizzato una cella in una posizione 
tanto alta)
    If Risposta = vbNo Then
        rstx.Close
        Set rstx = Nothing
        Set tdfx = Nothing
        Codicinonerrore = "7874;"
        Erroreoccorso = 0
        DoCmd.DeleteObject acTable, Tabella
        Codicinonerrore = ""
        Exit Sub
    End If
... prosegue nella lettura di tutti i records della tabella di transito 
appena creata per andare a copiare i campi interessati negli opportuni campi 
della tabella di lavoro.
Ciao
Antonio