Newsgroup: it.comp.appl.access
Titolo: TransferSpreadsheet... + file.xls per ogni volta codice = 4 | Nome cartella = variabile xld

Buongiorno a Tutto L'Ng!!!!
Dovrei trasportare una tabella di access in excels.
Ogni volta che il campo Codice contiene il valore 4, deve memorizzare
il valore in SIM e creare un file di excel dei record che ha trovato.
Il codice qui sotto postato non funziona. Credo che devo indicare
l'intervallo di dati da esportare, ma leggendo la guida "Quando si
esegue un'esportazionein un foglio di calcolo, è necessario omettere
questo argomento, in quanto l'operazione non viene eseguita
correttamente se si specifica un intervallo.
La guida in access dice:
Il metodo transferspreadsheet esegue l'azioneTrasferisciFoglioCalcolo
in VisualBasic
espressione:
TransferSpreadsheet(TipoTrasferimento,
TipoFogliodiCalcolo,NomeTabella,NomeFile,NomiCampo,Intervallo,UtilizzaOA)
Cosa sbaglio?
Dim db As Database
Dim rst As ADODB.Recordset
Dim strSQLSIM As String
Dim xldSim As String
Set db = CurrentDb
Set rst = New ADODB.Recordset
strSQLSIM = "COMPLE4RIEP"
rst.Open strSQLSIM, CurrentProject.Connection, adOpenDynamic,
adLockOptimistic
Do While Not rst.EOF
If rst!codice = 4 Then
    xldSim = rst!SIM
End If
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97,
"Comple4Riep", "test", "c:\" & xldSim & ".xls"
rst.MoveNext
Loop
Set rst = Nothing
Grazie 10000000 x qls aiuto,
Samantha


ok ho trovato già un errore:
 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97,
 "Comple4Riep", "test", "c:\" & xldSim & ".xls"
 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97,
 "Comple4Riep", "c:\" & xldSim & ".xls"
Ora è iniziata l'esportazione dei dati, ma continua a sovrascrivere il
primo file che ha creato.... non ne scrive uno nuovo...
Devo forse mettere il Docmd.TransferSpreadsheet dentro il ciclo if?
Grazie 1000
Samantha


Posso aggiungere, che il mio gioiellino dovrebbe copiare i record da
codice = 4 a codice =37 per l'esportazione
Quindi:
Se Codice = 4 allora
prendi il valore di SIM e lo copi nella variabile xldSim
Esporta i dati in un foglio excel fino a Codice = 37
     Se codice =37
          exit Sub
     Chiudi If
Chiud If
Move next
Loop
Ora ci provo

 ha scritto nel messaggio 
news:1190706020.6...@g4g2000hsf.googlegroups.com...
Posso aggiungere, che il mio gioiellino dovrebbe copiare i record da
codice = 4 a codice =37 per l'esportazione
Quindi:
Se Codice = 4 allora
prendi il valore di SIM e lo copi nella variabile xldSim
Esporta i dati in un foglio excel fino a Codice = 37
     Se codice =37
          exit Sub
     Chiudi If
Chiud If
Move next
Loop
Ora ci provo
[risposta]
Vedi messaggio con oggetto: Automazione da tabella temporane access in excel 
del 24/9/07 inviato da: 
maru...@libero.it
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Ciao Sergio,
sono riuscita alla fine utilizzando due query parametrizzate. La prima
mi dava tutte le sim, la seconda, tramite il nr. sim veniva filtrata.
A questo punto le ho trasportate in excel tramite transferspreadsheet.
Ora mi rimane un problema, quello di chiedere all'utente in quale
cartella vuole salvare il file.
Vorrei provare con i commondialog... vediamo che risultati offre... ;)
Ciao e bg
Samantha

 Samantha
Sul sito comune e in quello di Alessandro BARALDI ci sono degli esempi...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggionews:1190788988.2...@57g2000hsv.googlegroups.com...

Ciao Sergio,
è andata,
con questo trovo la directory dove si trova mdb in uso e poi gli dico
dove salvarlo:
Dim nomecartella As String
nomecartella = Left(CurrentDb.Name, Len(CurrentDb.Name) -
Len(Dir(CurrentDb.Name)))
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "dati",
nomecartella & rst!SIM & ".xls"
Ora ho un altro problema.
Ho tutte le chiamate, che ho suddiviso tra personali e aziendali.
Ho calcolato la somma delle chiamate personali e somma delle chiamate
aziendali, raggruppate by sim.
Ora dovrei creare una query di aggiornamento, che presa la somma da
chiamate personali, in base alla SIM faccia l'aggiornamento del campo
C35Per
Questo è quello che ho scritto finora
Dim db As Database
   Dim rst As ADODB.Recordset
   Dim strTPer As String
   Dim strTAzi As String
   Dim strTable As String
   Dim qdfp As QueryDef
   Dim qdfa As QueryDef
   strTable = "Tab_riepilogativo"
   Set db = CurrentDb
   Set rst = New ADODB.Recordset
   rst.Open strTable, CurrentProject.Connection
    Do Until rst.EOF
    strTPer = "SELECT Sum([costo]) AS TotPersonale" & _
              "FROM TAB5_Calcoli GROUP BY TAB5_Calcoli.IDSIM,
TAB5_Calcoli.TIPO " & _
              "HAVING (((TAB5_Calcoli.IDSIM)=" & Chr$(34) & rst!SIM &
Chr$(34) & " AND ((TAB5_Calcoli.TIPO)='Personale'));"
    rst!C35per =
    strTAzi = "SELECT Sum(TAB5_Calcoli.COSTO) AS TotAziendale" & _
              "FROM TAB5_Calcoli GROUP BY TAB5_Calcoli.IDSIM,
TAB5_Calcoli.TIPO" & _
              "HAVING (((TAB5_Calcoli.IDSIM)=" & Chr$(34) & rst!SIM &
Chr$(34) & " AND ((TAB5_Calcoli.TIPO)='Personale'));"
    rst!C35azi =
    rst.MoveNext
    Loop
rst.Close
Set rst = Nothing
Come devo dirgli che il  valore che la query gli tira fuori deve
assegnarlo a quel campo?
Grazie,
Samantha


Dopo provo a testare questo codice:
Dim db As Database
   Dim rstRiepilogo As ADODB.Recordset
   Dim strTPer As String
   Dim strTAzi As String
   Dim strTable As String
   Dim qdfp As QueryDef
   Dim qdfa As QueryDef
   Dim valper As Double
   Dim valazi As Double
   strTable = "Tab_riepilogativo"
   Set db = CurrentDb
   Set rstRiepilogo = New ADODB.Recordset
   rstRiepilogo.Open strTable, CurrentProject.Connection
    Do Until rstRiepilogo.EOF
         valper = 0
         strTPer = "SELECT Sum([costo]) AS TotPersonale" & _
              "FROM TAB5_Calcoli GROUP BY TAB5_Calcoli.IDSIM,
TAB5_Calcoli.TIPO " & _
              "HAVING (((TAB5_Calcoli.IDSIM)=" & Chr$(34) & rst!SIM &
Chr$(34) & " AND ((TAB5_Calcoli.TIPO)='Personale'));"
         Set qdfp = db.CreateQueryDef("Dati", strTPer)
         If rs.RecordCount <> 0 Then
            If IsNull(rs.Fields("totpersonale") = False) Then
            valper = rs.Fields("TotPersonale")
            End If
         End If
        rs.Close
        Set rs = Nothing
    rstRiepilogo.EditMode
    rstRiepilogo.Fields("C35Per") = valper
    rstRiepilogo.Update
    rstRiepilogo.MoveNext
    Loop


ok è andata....
 il codice non era proprio corretto ma tramite visual basic editor
l'ho sistemato
;)
Samantha

 ha scritto nel messaggio 
news:1190816709.3...@r29g2000hsg.googlegroups.com...
ok è andata....
 il codice non era proprio corretto ma tramite visual basic editor
l'ho sistemato
;)
Samantha
[risposta]
Visto che bravo a dare supporto?
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
:D
Vorrei capire meglio come funzionano i recordset. Ho dubbi tipo, se ho
necessità di aprire due recordset, devo aprire due database? Credo che
più recordset possano coesistere sulla stessa connessione database.
Tu non hai qualche cosa in italiano?
E poi devo rileggermi meglio il tuo intervento x cooperazione con
EXCEL. Il transferspreadsheet è utile, veloce ma non lascia
possibilità di personalizzazione.
Poi, corsi di VBA secondo te ne trovo in giro?  Ne hai mai fatti? Se
si cosa mi consigli?
:) Grazie Sergio, e buon lavoro
Samantha

 ha scritto nel messaggio 
news:1190902446.9...@19g2000hsx.googlegroups.com...
:D
Vorrei capire meglio come funzionano i recordset. Ho dubbi tipo, se ho
necessità di aprire due recordset, devo aprire due database? Credo che
più recordset possano coesistere sulla stessa connessione database.
[risposta]
Puoi aprire più recordset anche sulla stessa origine dati (tabella/query).
Tu non hai qualche cosa in italiano?
[risposta]
L'effeuno.
Ma a parte gli scherzi, puoi leggere qualcosa qui:
(DAO)
http://msdn.microsoft.com/library/ita/default.asp?url=/library/ITA/vccore/html/_core_database_topics_.28.dao.29.asp
(ADO)
http://msdn2.microsoft.com/en-us/library/ms807730.aspx
e comunque sarebbero tutte informazioni prese da internet.
E poi devo rileggermi meglio il tuo intervento x cooperazione con
EXCEL. Il transferspreadsheet è utile, veloce ma non lascia
possibilità di personalizzazione.
[risposta]
Già.
Poi, corsi di VBA secondo te ne trovo in giro?
[risposta]
Pochissimi, costosi e (secondo me) non proprio utili se fatti in modo 
generico.
VBA è VBA, sia utilizzato con Access che con altri software Office.
Ne hai mai fatti? Se si cosa mi consigli?
[risposta]
Non di VBA. Ho fatto VB6 e te lo consiglio, perché ti da una panoramica più 
ampia; visto che VBA è un poco più ristretto.
:) Grazie Sergio, e buon lavoro
[risposta]
Prego e buon lavoro anche a te...
Samantha
[risposta]
Ciao.
-- 
Sergio MAZZA