Newsgroup: it.comp.appl.access
Titolo: esportazione TO excel errore formattazione numeri con .CopyFromRecordset rs

salve
da un thread di @Alex
https://groups.google.com/forum/#!searchin/it.comp.appl.access/esportare$20in$20excel|sort:relevance/it.comp.appl.access/x1wzYRzOC1I/2xs-3uohkZwJ
 
 
ho la funzione che esporta un recordset in un file excel
con il comando 
.CopyFromRecordset rs
 
non capisco come mai ha sempre funzionato correttamente
mentre ora da 2 pc i campi numerici con 2 decimali
vengono esportati senza il separatore decimale!!
 
Potete darmi un aiuto?
GRAZIE
 
 
 
Function EXP2XLS(SQL    as string, _
                 Optional ByRef NomeFile As String = vbNullString, _
                 Optional OpenDialog As Boolean = False, _
                 Optional CloseExcel As Boolean = True) As Boolean
    On Error GoTo Handle_err
    Dim xlApp   As Object   ' Oggetto EXCEL
    Dim oWkb    As Object   ' Oggetto WORKBOOK
 
    Dim x       As Integer
    Dim rs      As DAO.Recordset
 
    EXP2XLS= False
 
    ' APRE SE ESISTE GIA' UN'OGGETTO EXCEL
    Set xlApp = CreateObject("Excel.Application")
 
    Set oWkb = xlApp.Workbooks.Add()
 
    If OpenDialog = True Then
 
        Do Until NomeFile <> ""
            NomeFile = xlApp.GetSaveAsFilename(InitialFilename:="C:
\TestExport.xls", _
                                               fileFilter:="Excel
Files (*.xls), *.xls", _
                                               Title:="SELEZIONA NOME
FILE")
 
            DoEvents
        Loop
 
    End If
 
    If Len(NomeFile) = 0 Then NomeFile = "C:\TestExport.xls"
 
    If EsisteFile(NomeFile) Then Kill NomeFile
 
    ' ATTENZIONE ALLA VERSIONE DI EXCEL, usare 43 oppure 50 a seconda
della versione 2003 o superiore...
    oWkb.SaveAs NomeFile, 43
 
    ' Elimino i Fogli che Excel crea di DEFAULT
    For x = oWkb.Sheets.Count To 2 Step -1
        oWkb.Sheets(x).Delete
    Next
 
    ' Assegno un nome al Foglio(Sheet) rimasto.
    oWkb.Sheets(1).Name = "MANUTENZIONI"
 
    Set rs = CurrentDb.OpenRecordset(SQL,dbOpenDynaset,dbReadOnly)
 
    ' Scrivo nella Cella A1
    oWkb.Sheets(1).Range("A1").CopyFromRecordset rs
 
    rs.Close
    Set rs = Nothing
 
    EXP2XLS= True
 
Exit_Here:
    oWkb.Save
    If CloseExcel Then
        oWkb.Close True
        xlApp.Quit
    Else
        xlApp.Visible = True
    End If
    Set oWkb = Nothing
    Set xlApp = Nothing
    Exit Function
 
Handle_err:
    MsgBox Err.Number & " " & Err.Description
    Resume Exit_Here
End Function

Hai verificato che in Excel le Colonne abbiano come Formato la visualizzazione dei Decimali...? 
Insostanza discrimina se è un problema di FORMATO o di CONTENUTO.
 
Se fosse di CONTENUTO, posso immaginare si tratti di campi originati da un CALCOLO nella Query...?
In questo caso, imponi nella Query stessa la conversione ESPLICITA del VarType:
 
Quindi 
SELECT CCur(Tuocalcolo) AS NomeCampo ..... FROM....
 
@Alex
 


GRAZIE PRIMA DI TUTTO
 
il problema e' che e' la stessa applicazione su 2 pc diversi
 
apro excel
in un foglio nuovo esporto
se apro la stringa sql in access vedo correttamente i valori coi 2 decimali 
mentre in excel mi perdo il separatore dei decimali

 
 
cosa succede (ottieni qualche avviso di sistema ?) 
se adoperi, anche solo per un test,
gli altri comandi a disposizione:
 
docmd.transferSpreadsheet
docmd.outputTO
magari imponendo un formato Excel "vecchio" (xls invece di xlsx)
 
con la query salvata ?
 
 
 


grazie del messaggio
 
mi sono creato la query di appoggio
e con il comando 
DoCmd.OutputTo acOutputQuery, sTmpQuery, acFormatXLS, CurrentProject.Path & "\" & "__try.xls"
 
il file xls mi fa vedere i dati corretti con separatore decimale
 

 il file xls mi fa vedere i dati corretti con separatore decimale
 
e quindi, probabilmente, rimarrà da fare "il contorno" in Excel.
 
Aggiungo una descrizione di quanto ottenuto in una modesta realizzazione
(un listino, trasferimento con docmd.transferSpreadsheet):
 
il foglio excel, DOPO il primo trasferimento,
può essere usato come "stampo" per i successivi trasferimenti.
 
Jnfatti il trsferimento genera una zona dati
(il cui nome è presente fra i nomi di zona)
e riserva per sè TUTTE le righe sottostanti
(a quella con i nomi campo)
 
Però ho inserito righe al di sopra di essa
dove ho poi collocato logo 
e altre celle che si possono valorizzare da codice.
 
Quindi il riempimento avviene in due step:
1) trasferimento dati sul foglio excel "stampo"
(quindi nome file esistente)
2) completamento (riempimento) da codice 
delle poche celle "esterne" alla zona dati 
(nel mio caso al di sopra della zona)
aprendo il file Excel, dopo il transfer, da Access