Newsgroup: it.comp.appl.access
Titolo: [h]:mm questo sconosciuto

Il formato [h]:mm presente in Excel per contare il TOTALE ore purtroppo non
esiste in Access.
Nessun problema.
1. Elaboro la mia query (a campi incrociati)
2. Uso una funzione, di mia creazione ToTime(Ore) as string che restituisce
le ore totali in formato umano.
2.1. Peccato. Nei campi incrociati non sono ammesse formule personalizzate
(o io non sono capace?)
Soluzione
1. Elaboro la mia query (a campi incrociati)
-------------
2. La esporto su Excel
3. Eseguo una macro (già scritta per Excel) che formatta tutto come si deve
4. Fine
Domande:
Chi mi sa dire:
1. Come si svolgono i punti 2. e 3. da VBA. A dire il vero non è
l'esportazione il problema, ma il mettere le mani in un documento Excel e
"spupazzarlo" a mio piacere da ambiente Access (2000).
Grazie a chiunque risponderà,
Giacomo.

 ha scritto nel messaggio
news:kNamb.41548$e5.14...@news1.tin.it...

Altre due vie di uscita:
1 - utilizzare i collegamenti OLE ad Excel per utilizzare le sue funzioni
es. (inserire i riferimenti alla Libreria di Excel)
  Dim MyXL As Excel.Application
  Set MyXL = CreateObject("Excel.Application")
  MsgBox MyXL.WorksheetFunction.Sum(1, 2)
  Set MyXL = Nothing
2 - crearsi un foglio excel con inserita in una cella prestabilita (es. 4a
colonna 1a riga) la funzione che somma la colonna di valori (se trattasi di
più valori) e utilizzare il seguente codice per scrivere i dati e leggere il
contenuto della cella con il totale
es. con DAO (inserire i riferimenti alla Libreria di Excel)
Dim oApp As Excel.Application
Dim oWsh As Excel.Worksheet
'---------
Dim oRecSet As Recordset
Dim Riga As Integer, Colonna As Integer
Set oRecSet = CurrentDb.OpenRecordset("nomeTabellaoQuery")
Set oApp = CreateObject("Excel.Application")
oApp.Visible = False 'non voglio vedere che succede
oApp.Workbooks.Open "nomeFile.xls"
Set oWsh = oApp.ActiveWorkbook.Sheets(1) 'primo foglio
'legge i dati dalla tabellaOquery e li scrive sul foglio excel
Riga = 1: Colonna = 1
Do While Not oRecSet.EOF
    oWsh.Cells(Riga, Colonna) = oRecSet(0) 'primo campo
'se scrivi su più colonne
    oWsh.Cells(Riga, Colonna + 1) = oRecSet(1) 'secondo campo
    oWsh.Cells(Riga, Colonna + 2) = oRecSet(2) 'e così via
    oWsh.Cells(Riga, Colonna + 3) = oRecSet(3)
    oWsh.Cells(Riga, Colonna + 4) = oRecSet(4)
    Riga = Riga + 1
    oRecSet.MoveNext
Loop
oRecSet.Close
Set oRecSet = Nothing
'legge il valore della cella 4a colonna 1a riga
MsgBox oWsh.Cells(4,1)
set oWsh = nothing
set oApp = nothing
Ciao.
--
Sergio MAZZA

 contenuto della cella con il totale
Credo che il secondo sia quello che cercavo (grazie).
Mancano pochi dettagli (essendo una query a campi incrociati non sono note
il numero di colonne) ma penso di potermela cavare con le mie gambe poiché:
1. Le prime due colonne sono Codice e Descrizione
2. Dalla terza in poi ho le ore lavorate.
Resta da fare la formattazione (in qualche modo con la libreria Excel si fa)
e l'inserimento dei subtotali.
NB Il tutto è già fatto
__________________________________
Sub FormattazionePivotOre()
'
'   Rinomina la scheda
    Sheets("QryPivotOre").Name = "Pivot Ore"
'   Enfatizza i titoli
    Rows("1:1").Select
    Selection.Font.Bold = True
'   Imposta il formato "conteggio ore totali"
    Columns("C:IV").Select
    Selection.NumberFormat = "[h]:mm"
'   Inserisce i subtotali relativi alle singole opere
    Cells.Select
    Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(3), _
        Replace:=True, PageBreaks:=False, SummaryBelowData:=True
'   Imposta i margini delle colonne in base alla dimensione
    Cells.Select
    Cells.EntireColumn.AutoFit
'   Porta il cursore nella cella "A1"
    Cells(1, 1).Select
End Sub
__________________________________
ma in Excel. Ora devo di trasferire 'sta roba in Access e ho finito.
Intanto grazie.
Giacomo.

 ha scritto nel messaggio
news:Ztbmb.41809$e5.14...@news1.tin.it...

Per la cronaca; se non vuoi interferire con la costruzione della tabella, la
cella con la funzione la puoi inserire in un altro foglio...
Ciao.
--
Sergio MAZZA

 4. Fine
cut
E' proprio un'esigenza tua di esportare in excel?
Comunque puoi sempre fare una query della query a campi incrociati e li'
applicare la tua formula.
Sib

 ha scritto nel messaggio
news:kNamb.41548$e5.14...@news1.tin.it...

    Testato (molto poco!) con AC 2000, 2002, 2003:
        TRANSFORM
            FormatHMM(
                Sum(([T].[oraUscita]-[T].[oraIngresso])*2400)
            ) AS Espr2
        SELECT T.idDipendente
        FROM OreDipendenti AS T
        GROUP BY T.idDipendente
        PIVOT Month([T].[oraIngresso]);
        Public Function FormatHMM(ByVal NumOre As Double) As String
          FormatHMM _
            = CStr(NumOre \ 100) _
            & "." _
            & Format$(Right$(NumOre \ 1, 2) * 60 / 100, "00")
        End Function
e sembra funzionare.
-- 
    (Facci sapere se ed eventualmente come hai risolto. Grazie.)
Ciao :o)
Maurizio
--------
?SPQR(C)
 X
--------

 applicare la tua formula.
Grazie per il consiglio. Anche se il problema è identificare i campi (dovrei
applicare una formula a tutti i campi a partire dal terzo).
L'esigenza di esportare in Excel nasce dal fatto che alla fine si deve fare
un report della query, ma non conoscendo il numero dei campi (né i loro
nomi), dunque una semplice questione di comodità personale.
Grazie,
Giacomo.

 nomi), dunque una semplice questione di comodità personale.
Per questo sul sito comune trovi esempi di report a controlli dinamici.
Sib


Grazie (ho risolto).
1. La tua tecnologia (per quel che riguarda l'inserimento di una funzione
definita dall'utente in una query a campi incrociati) funziona solo per il
TotOre (non per il corpo della quey). Io uso Access 2000.
1.1 Pazienza. Vorra' dire che scriviamo una query un po' piu' lunga del
solito, riportando la funzione personalizzata dentro la query. Copia e
incolla aiuta moltissimo.
Morale: ho usato la tua funzione per il totale ore. O provato ad inserirla
nel corpo della query sia da SQL, sia dall'editor di Access. Nulla da fare.
Risultato:
TRANSFORM
Format$(Int(Sum(Ore)*24)+(Sum(Ore)*24-Int(Sum(Ore)*24))*0.6,"Standard") AS
Corpo
SELECT
tblTempi.CodiceOpera, tblTipologiaPrestazioni.Descrizione AS
TipologiaPrestazione,
Format$(Int(Sum(Ore)*24)+(Sum(Ore)*24-Int(Sum(Ore)*24))*0.6,"Standard") AS
TotOre
FROM tblTipologiaPrestazioni INNER JOIN (tblRisorse INNER JOIN tblTempi ON
tblRisorse.Codice = tblTempi.CodiceRisorsa) ON
tblTipologiaPrestazioni.Codice = tblTempi.CodiceTipologiaPrestazione
WHERE (((tblTempi.CodiceOpera)<>"VARIE"))
GROUP BY tblTempi.CodiceOpera, tblTipologiaPrestazioni.Descrizione
ORDER BY tblTempi.CodiceOpera
PIVOT tblRisorse.Descrizione;
PS In realtà ho sia ore ordinarie, sia ore straordinarie, faccio la somma e
controllo che non vi sianopresenti NULL. Nel caso li sostituisco con degli
0. I JOIN servono per la decodifica codici e il report... non lo faccio.
Stampo la query (non cambia quasi nulla).
PPS Scusate ma (ve ne sarete accorti) Emauele Gostoli sono io, anzi, a onor
del vero un mio collega, un diverso computer, un po' di distrazione.
Grazie,
Giacomo.