Ciao a tutti,
avrei bisogno di importare dati da più file excel contenuti in una cartella in una determinata tabella di access.
I file excel hanno la stessa struttura ed i dati da importare sono contenuti in 2 fogli: il primo foglio "Informazioni generali" contiene 2 informazioni da ripetere in corrispondenza degli altri dati contenuti nel secondo foglio "Utenze domestiche".
Ho provato con un ciclo Do ... Loop ma funziona soltanto su 1 file.
Il ciclo dovrebbe inserire nella tabella di access "ud", tramite la query (INSERT INTO), i dati copiati da tutti i file fino a quando nel foglio "Utenze domestiche" non trova una cella vuota nella prima colonna.
Di seguito il codice con il Loop che copia correttamente i dati soltanto da 1 file: invece di lanciare la query ho inserito un Msgbox.
Vorrei quindi inserire un ciclo per eseguire la stessa operazione per tutti i files contenuti nella cartella ma non riesco.
Private Sub Comando1_Click()
Dim SourceDir As String
Dim app As Object
Dim file As Object
Dim foglio As Object
Dim riga As Integer
Dim query As String
riga = 2
SourceDir = "C:\Users\s.dedonato\Desktop\prova\" 'cartella da dove copiare tutti i files'
myFile = Dir(SourceDir & "\*.xls*") 'nome files da cui estrarre i dati'
Set app = CreateObject("Excel.Application")
Set file = app.Workbooks.Open(SourceDir & myFile)
Set anagrafica = file.worksheets("Informazioni generali")
Set foglio = file.worksheets("Utenze domestiche")
Do
If foglio.Cells(riga, 1) = "" Then
Exit Do
End If
MsgBox ("lancio query per il file" & myFile)
'query = "INSERT INTO ud(istat, comune, tipo_ut, ka, kb) VALUES('" & anagrafica.Cells(3, 2) & "','" & anagrafica.Cells(2, 2) & "','" & foglio.Cells(riga, 1) & "','" & foglio.Cells(riga, 2) & "','" & foglio.Cells(riga, 3) & "');"
'DoCmd.SetWarnings False 'disabilito gli avvisi
'DoCmd.RunSQL query 'lancia la query chiamata query
'DoCmd.SetWarnings True 'riattivo gli avvisi
MsgBox ("Istat - " & anagrafica.Cells(3, 2) & "," & "Comune - " & anagrafica.Cells(2, 2) & "," & "utenza - " & foglio.Cells(riga, 1) & "," & "ka - " & foglio.Cells(riga, 2) & "," & "kb - " & foglio.Cells(riga, 3))
riga = riga + 1 'per incrementare le righe per il ciclo
'Active.Workbook.Close = False 'non so se è utile chiudere il file dopo il loop
'myFile = Dir dovrei inserire un loop per far leggere tutti i file contenuti nella cartella
Loop
MsgBox ("arrivati in fondo")
End Sub
Grazie mille
avrei bisogno di importare dati da più file excel contenuti in una cartella in una determinata tabella di access.
I file excel hanno la stessa struttura ed i dati da importare sono contenuti in 2 fogli: il primo foglio "Informazioni generali" contiene 2 informazioni da ripetere in corrispondenza degli altri dati contenuti nel secondo foglio "Utenze domestiche".
Ho provato con un ciclo Do ... Loop ma funziona soltanto su 1 file.
Il ciclo dovrebbe inserire nella tabella di access "ud", tramite la query (INSERT INTO), i dati copiati da tutti i file fino a quando nel foglio "Utenze domestiche" non trova una cella vuota nella prima colonna.
Di seguito il codice con il Loop che copia correttamente i dati soltanto da 1 file: invece di lanciare la query ho inserito un Msgbox.
Vorrei quindi inserire un ciclo per eseguire la stessa operazione per tutti i files contenuti nella cartella ma non riesco.
Private Sub Comando1_Click()
Dim SourceDir As String
Dim app As Object
Dim file As Object
Dim foglio As Object
Dim riga As Integer
Dim query As String
riga = 2
SourceDir = "C:\Users\s.dedonato\Desktop\prova\" 'cartella da dove copiare tutti i files'
myFile = Dir(SourceDir & "\*.xls*") 'nome files da cui estrarre i dati'
Set app = CreateObject("Excel.Application")
Set file = app.Workbooks.Open(SourceDir & myFile)
Set anagrafica = file.worksheets("Informazioni generali")
Set foglio = file.worksheets("Utenze domestiche")
Do
If foglio.Cells(riga, 1) = "" Then
Exit Do
End If
MsgBox ("lancio query per il file" & myFile)
'query = "INSERT INTO ud(istat, comune, tipo_ut, ka, kb) VALUES('" & anagrafica.Cells(3, 2) & "','" & anagrafica.Cells(2, 2) & "','" & foglio.Cells(riga, 1) & "','" & foglio.Cells(riga, 2) & "','" & foglio.Cells(riga, 3) & "');"
'DoCmd.SetWarnings False 'disabilito gli avvisi
'DoCmd.RunSQL query 'lancia la query chiamata query
'DoCmd.SetWarnings True 'riattivo gli avvisi
MsgBox ("Istat - " & anagrafica.Cells(3, 2) & "," & "Comune - " & anagrafica.Cells(2, 2) & "," & "utenza - " & foglio.Cells(riga, 1) & "," & "ka - " & foglio.Cells(riga, 2) & "," & "kb - " & foglio.Cells(riga, 3))
riga = riga + 1 'per incrementare le righe per il ciclo
'Active.Workbook.Close = False 'non so se è utile chiudere il file dopo il loop
'myFile = Dir dovrei inserire un loop per far leggere tutti i file contenuti nella cartella
Loop
MsgBox ("arrivati in fondo")
End Sub
Grazie mille