Post by Marco[Cut...]
Public Function DataPrima1900InTesto(NumeroSeriale As Long) As String
If NumeroSeriale > -657435 Then
DataPrima1900InTesto = CStr(Format(NumeroSeriale, "dd-mmm-yyyy"))
End If
End Function
Non ho capito come si usa
Copia la Public Function....End Function in un modulo standard di una
cartella di lavoro di Excel. Ora la funzione è disponibile con
scrittura diretta nella barra della formula o con il comando Inserisci
Funzione ( categoria Definite dall' Utente ). Basta scrivere per es in
D2:
= DataPrima1900InTesto(B2) posto che in B2 vi sia un numero negativo
tra -1 e - 657434
ovviamente al posto del riferimento di cella ci può essere un numero
negativo.
Post by MarcoDipende dalla tua dimestichezza nell'uso del VBA di Excel oppure di
Access, la scelta se esportare i dati da Access con Automation via ADO
opp DAO oppure importarli in Excel via ADO / DAO (VBA obbligatorio )
opp con Microsoft Query ( VBA opzionale ).
Sarebbe interessante vedere come funziona una esportazione aprendo un
recorset... ma non la so scrivere.
Una delle possibili soluzioni ( esportazione da Access a Excel via
Automation con accesso ai Dati con DAO; assicurarsi che sia caricata la
libreria di Excel e di DAO ):
Option Compare Database
Option Explicit
Sub EsportaAdExcelViaDAO()
Dim iCols As Integer
Dim appExcel As Object
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim WB As Object
Set db = CurrentDb
Set rst = db.OpenRecordset("tabella1") ' << da cambiare
On Error Resume Next
Set appExcel = GetObject(, "Excel.Application")
If Err.Number = 429 Then
On Error GoTo 0
Set appExcel = CreateObject("Excel.Application")
End If
On Error GoTo 0
Set WB = appExcel.Workbooks.Add
With WB.Sheets(1)
For iCols = 0 To rst.Fields.Count - 1
.Cells(1, iCols + 1).Value = rst.Fields(iCols).Name
Next
.Range("A2").CopyFromRecordset rst
.Range(.Cells(1, 1), _
.Cells(1, rst.Fields.Count)).Font.Bold = True
.Range(.Cells(1, 1), _
.Cells(1, rst.Fields.Count)).EntireColumn.AutoFit
End With
Workbooks(WB.Name).SaveAs Filename:="Tabella2.xls" '<< da cambiare
appExcel.Visible = True
rst.Close
Set rst = Nothing
Set appExcel = Nothing
End Sub
N.B. ho potuto verificare che anche un semplice copia della tabella in
Access con un copia in Excel trasferisce anche le date antecedenti al
1900 come numeri seriali negativi
Post by MarcoFammi sapere se hai risolto
Una soluzione proposta nel newsgroup di access è di trasformare le date in
testo ed esportarle con il TransferSpreadsheet
In tal caso non potrai fare conti tra le date perchè avresti bisogno
di una conversione inversa che ti restituisce il numero seriale
negativo tipo Clng(#01-feb-1836#). Se non ti aggrada l'esportazione con
il codice precedente potresti farti una query con una colonna calcolata
che converte le date in numeri seriali e solo dopo applicare a questa
il metodo TransferSpreadsheet.
Ciao Elio