salve
la macro che sopra indicata da inserire in un modulo standard nell'editor di Visual Basic, va inserita come segue:
Dal foglio excel del tuo file, ALT+F11 ti fa accedere all'editor di Vba, una volta aperta la finestra dell'editor, Menù Inserisci> Modulo. Nella pagina bianca che si apre nella finestra di destra incolla tutto il codice.
Per funzionare, devi attivare il riferimento all'oggetto Activex Menu Strumenti>Riferimenti, cerca la voce "Microsoft ActiveX Data Objects 2.0 Library" mettigli il segno di spunta e conferma con Ok
Con ALT+F11 torni al foglio. Ora puoi richiamare la macro in due modi:
1) Menù Strumenti>Macro seleziona la macro appena incollata e clicca su Esegui
2) inserire un pulsante sul foglio ed associargli la le detta macro.
Traduzione del codice:
Sub ADOFromExcelToAccess()
'dichiarazioni delle variabiliDim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
'Connessione al Database di accessSet cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source=C:\Db1.mdb;"
'apre il recordset Tabella1 per ricevere i datiSet rs = New ADODB.Recordset
rs.Open "Tabella1", cn, adOpenKeyset, adLockOptimistic, adCmdTable
'conta i fogli For x = 1 To Sheets.Count
'comincia a leggere i dati da riga 2r = 2
'fino a quando non trova una cella vuota in colonna ADo While Range("A" & r).Value <> ""
'con la condizione che il campo Valore sia diverso da zeroIf Range("E" & r).Value <> 0 Then
'aggiunge i records alla tabellaWith rs
.AddNew
'ATTENZIONE QUI AVEVO OMESSO IL RICHIAMO DEL FOGLIO
.Fields("Nriga") = Sheets("Foglio" & x).Range("A" & r).Value
.Fields("Codice") = Sheets("Foglio" & x).Range("B" & r).Value
.Fields("Descrizione") = Sheets("Foglio" & x).Range("C" & r).Value
.Fields("UM") = Sheets("Foglio" & x).Range("D" & r).Value
.Fields("qta") = Sheets("Foglio" & x).Range("E" & r).Value
.Fields("Prezzo") = Sheets("Foglio" & x).Range("F" & r).Value
.Fields("Valore") = Sheets("Foglio" & x).Range("G" & r).Value
.Update
End With
End If
'passa a leggere la riga successivar = r + 1
Loop
Next x
'chiude tutte le istanzers.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
SOLUZIONE CON MACRO IN AMBIENTE ACCESS:
questi sono i passi da eseguire:
Creazione della Tabella con intestazioni di campo identici al foglio Excel
Creazione di una maschera con un pulsante per richiamare la macro. Una volta creato il pulsante, click dx su di esso e scsegliere proprietà, nella scheda "Evento", alla voce "Click" troverai a fianco il simbolo di 3 puntini, clicca su di esso, selezionano la voce "Generatore di codice" e ti si aprirà l'editor di Visual Basic con le sguenti voci:
Private Sub Comando0_Click()
End Sub
copia tutto questo codice in mezzo a Private Sub.. e End Sub
Dim DBCOrrente As DAO.Database
Dim Tabella As DAO.Recordset
Dim I As Long
'Apre il file Excel
Workbooks.Open Filename:="c:\Prova.xls"
'Apre la tabella
Set DBCOrrente = CurrentDb
Set Tabella = DBCOrrente.OpenRecordset("Tabella1")
'conto il numero dei fogli del workbook
For x = 1 To Sheets.Count
r = 2 ' per ogni foglio inizio da riga 2
Do While Range("A" & r).Value <> ""
'escludo tutti quelli che hanno il campo "Valore" =0
If Range("E" & r).Value <> 0 Then
'Aggiorno la Tabella
With Tabella
.AddNew
.Fields("Nriga") = Worksheets("Foglio" & x).Range("A" & r)
.Fields("Codice") = Worksheets("Foglio" & x).Range("B" & r)
.Fields("Descrizione") = Worksheets("Foglio" & x).Range("C" & r)
.Fields("UM") = Worksheets("Foglio" & x).Range("D" & r)
.Fields("Qta") = Worksheets("Foglio" & x).Range("E" & r)
.Fields("Prezzo") = Worksheets("Foglio" & x).Range("F" & r)
.Fields("Valore") = Worksheets("Foglio" & x).Range("G" & r)
.Update
End With
End If
r = r + 1 ' passo alla lettura della riga successiva
Loop
Next x
Tabella.Close
DBCOrrente.Close
Workbooks("Prova.xls").Close
Anche questa macro (che come vedi è simile all'altra) per funzionare necessita che vengano attivate le librerie di riferimento.
Menù Strumenti>Riferimenti
cerca e spunta le seguenti voci: confermando con Ok
Microsoft DAO 3.6 Object Library
Microsoft Excel 11.0 Object Library
ALT+F11 ti ricondurrà alla finestra di access
non ti rimane altro che richiamare la Maschera e cliccare sul pulsante.
Spero di non aver fatto troppo casino.
per quanto riguarda ASP non ti so aiutare.
saluti
Andrea