Newsgroup: it.comp.appl.access
Titolo: Importare dati di campi specifici tabella Excel

Buongiorno, espongo il mio quesito
Ho una tabella chiamata "tb_Prodotti" con i seguenti campi:
Codice
Descrizione
Prezzo
Ho una maschera "fr_CaricaDati" su cui c'è un pulsante "cmdIMPORTA"
Quello che vorrei fare è che cliccando sul pulsante "cmdIMPORTA" mi
vengano copiati nella "tb_Prodotti", nei rispettivi campi, i dati
provenienti da una tabella Excel che contiene fra gli altri, anche le
colonne:
Codice
Descrizione
Prezzo
ma NON sono contigue (tali colonne) per esempio 
Codice è sotto la colonna B
Descrizione è sotto la colonna E
Prezzo è sotto la colonna H
Come posso fare tramite VBA 
(senza usare TransferSpreadSheet...)
Qualcuno può aiutarmi? Graziee
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Qualcuno può aiutarmi? Graziee
Ho provato utilizzando un pezzo di codice che ho trovato su un post qui
************************************************************
Private Sub Comando0_Click()
Set oApp = CreateObject("Excel.Application")
Set oWks = oApp.Workbooks.Open("C:DocumentiListaProdotti.xls")
Set oWsh = oWks.Worksheets(1)
Dim recSet As Recordset
Set recSet = CurrentDb.OpenRecordset("tb_Prodotti")
'n è la riga che deve incrementarsi
recSet.AddNew
recSet("Codice") = oWsh.Cells(n, 2)
recSet("Descrizione") = oWsh.Cells(n, 5)
recSet("Prezzo") = oWsh.Cells(n, 8)
recSet.Update
recSet.Close
Set recSet = Nothing
End Sub
************************************************************
Funziona ma mi copia solo la prima riga del file excel per fare in modo
che mi copi anche le altre come posso agire? Help !!!!


 Qualcuno può aiutarmi? Graziee

************************************************************




recSet.Update
recSet.Close
Set recSet = Nothing
End Sub
************************************************************

_________Risposta:
Devi ciclare il rigo
con
For i = 1 TO ...
recSet.AddNew
recSet("Codice") = oWsh.Cells(i, 2)
recSet("Descrizione") = oWsh.Cells(i, 5)
recSet("Prezzo") = oWsh.Cells(i, 8)
recSet.Update
    NEXT
MA

 ************************************************************

Nel codice che ho modificato funziona tutto correttamente a parte il fatto
che non so come ricavare il numero di righe di del file Excel divese dalle
celle vuote. Infatti cosi come è adesso mi vengono copiate anche le celle
vuote:
************************************************************
Private Sub Comando0_Click()
Dim n as Integer
Set oApp = CreateObject("Excel.Application")
Set oWks = oApp.Workbooks.Open("C:DocumentiListaProdotti.xls")
Set oWsh = oWks.Worksheets(1)
Dim recSet As Recordset
Set recSet = CurrentDb.OpenRecordset("tb_Prodotti")
'n è la riga che deve incrementarsi
For n = 2 To 10
 recSet.AddNew
 recSet("Codice") = oWsh.Cells(n, 2)
 recSet("Descrizione") = oWsh.Cells(n, 5)
 recSet("Prezzo") = oWsh.Cells(n, 8)
 recSet.Update
Next
recSet.Close
Set recSet = Nothing
End Sub
************************************************************
Qualche idea ?


 MA
Nel codice che ho modificato funziona tutto correttamente a parte il fatto
che non so come ricavare il numero di righe di del file Excel divese dalle
celle vuote. Infatti cosi come è adesso mi vengono copiate anche le celle
vuote:
************************************************************
Private Sub Comando0_Click()
Dim n as Integer
Set oApp = CreateObject("Excel.Application")
Set oWks = oApp.Workbooks.Open("C:DocumentiListaProdotti.xls")
Set oWsh = oWks.Worksheets(1)
Dim recSet As Recordset
Set recSet = CurrentDb.OpenRecordset("tb_Prodotti")
'n è la riga che deve incrementarsi
For n = 2 To 10
recSet.AddNew
recSet("Codice") = oWsh.Cells(n, 2)
recSet("Descrizione") = oWsh.Cells(n, 5)
recSet("Prezzo") = oWsh.Cells(n, 8)
recSet.Update
Next
recSet.Close
Set recSet = Nothing
End Sub
************************************************************
Cioè al posto del 10 vorrei mettere l'esatto numero delle righe non vuote
di excel
Qualche idea ?


 MA
Nel codice che ho modificato funziona tutto correttamente a parte il fatto
che non so come ricavare il numero di righe di del file Excel divese dalle
celle vuote. Infatti cosi come � adesso mi vengono copiate anche le celle
vuote:
************************************************************
Private Sub Comando0_Click()
Dim n as Integer
Set oApp = CreateObject("Excel.Application")
Set oWks = oApp.Workbooks.Open("C:DocumentiListaProdotti.xls")
Set oWsh = oWks.Worksheets(1)
Dim recSet As Recordset
Set recSet = CurrentDb.OpenRecordset("tb_Prodotti")
'n � la riga che deve incrementarsi
For n = 2 To 10
recSet.AddNew
recSet("Codice") = oWsh.Cells(n, 2)
recSet("Descrizione") = oWsh.Cells(n, 5)
recSet("Prezzo") = oWsh.Cells(n, 8)
recSet.Update
Next
recSet.Close
Set recSet = Nothing
End Sub
************************************************************
Cio� al posto del 10 vorrei mettere l'esatto numero delle righe non vuote
di excel
Qualche idea ?
__________Risposta:
No tu lo devi fare finch� � vuota la cella
quindi anche con un
do
LOOP until  oWsh.Cells(n, 1) = ""
ma all'interno del ciclo devi mettere n = n+1
altrimenti non si incrementa
e poi quando passi alla cella successiva testi if oWsh.Cells(n, 1) <>"" then 
l� aggiungi
MA

 MA
************************************************************
 Private Sub Comando0_Click()
 Dim n as Integer
 Set oApp = CreateObject("Excel.Application")
 Set oWks = oApp.Workbooks.Open("C:DocumentiListaProdotti.xls")
 Set oWsh = oWks.Worksheets(1)
 Dim recSet As Recordset
 Set recSet = CurrentDb.OpenRecordset("tb_Prodotti")
 n = 1
 
 'Inizio del ciclo
 
Do
 
 n = n + 1
 
 If oWsh.Cells(n, 1) <> "" Then
  recSet.AddNew
  recSet("Codice") = oWsh.Cells(n, 2)
  recSet("Descrizione") = oWsh.Cells(n, 5)
  recSet("Prezzo") = oWsh.Cells(n, 8)
  recSet.Update
 End If
Loop Until oWsh.Cells(n, 1) = ""
 recSet.Close
 Set recSet = Nothing
 End Sub
Funziona alla grande grazieissimoo MA 
Ps. Ultima cosa come faccio a chiudere Excel che rimane in esecuzione ?
(lo vedo dal Task manager)


  If oWsh.Cells(n, 1) <> "" Then





OK RISOLTO !!!! ho fatto cosi posto il codice completo cosicchè possa
essere d'aiuto ad altri
a prestissimooooooooo!!!
***************************************************
Private Sub Comando0_Click()
Dim n as Integer
Set oApp = CreateObject("Excel.Application")
Set oWks = oApp.Workbooks.Open("C:DocumentiListaProdotti.xls")
Set oWsh = oWks.Worksheets(1)
Dim recSet As Recordset
Set recSet = CurrentDb.OpenRecordset("tb_Prodotti")
n = 1
'Inizio del ciclo
Do
n = n + 1
If oWsh.Cells(n, 1) <> "" Then
recSet.AddNew
recSet("Codice") = oWsh.Cells(n, 2)
recSet("Descrizione") = oWsh.Cells(n, 5)
recSet("Prezzo") = oWsh.Cells(n, 8)
recSet.Update
End If
Loop Until oWsh.Cells(n, 1) = ""
' fine ciclo
'chiude il recordset
recSet.Close
Set recSet = Nothing
'Chiude l'applicazione Excel in background
owks.Application.Quit
Set owks = Nothing
End Sub
***************************************************
