Newsgroup: it.comp.appl.access
Titolo: passare valore data

Buongiorno.
da codice voglio salvare il report in pdf rinominando il file con del testo e con la data della form che si apre e si chiude ad apertura report.
Il codice è:
Me.Form.Refresh
 
Dim Azienda As String
Azienda = Nz(DLookup("nomeazienda", "tblAziende", "idAzienda=" & IdAzienda))
 
DoCmd.OpenReport "ElencoSoci", acViewPreview
 
Dim Data As Date
Data = Format(Forms!FrmCriteriDiRicerca!Data_fine_trans, "dd-mm-yy")
 
percorso = "U:\" & Azienda & "\Soci\" & "Elenchi Storici"
DoCmd.OutputTo acOutputReport, "ElencoSoci", acFormatPDF, percorso & "\" & "Elenco Soci al " & Data & ".pdf"
 
DoCmd.Close acReport, "ElencoSoci"
 
Mi salva il file nel percorso corretto ma lo rinomina così
Elenco Soci al 00.00.00
anzichè con la data che ho messo come filtro.
Cosa devo cambiare?
Grazie.
Giuseppe


Data non esiste... o meglio lo interpreta come VARIABILE ed ovviamente non valorizzata.
Eventualmente sarebbe Date()... questo fa capire che non hai abilitato la dichiarazione ESPLICITA delle VARIABILI...!
 
Ti suggerisco di Formattare la Data:
Format(Date(),"yyyymmdd")
 
Saluti
@Alex

Ciao,
dal codice che riporti la variabile Data viene dichiarata come di tipo Date:
Dim Data As Date 
Data = Format(Forms!FrmCriteriDiRicerca!Data_fine_trans, "dd-mm-yy")
 
Quindi il formato che tenti di applicare viene completamente ignorato e così anche il valore.
Per ottenere il tuo scopo devi dichiarare la variabile come string.
Sull'uso del formato "yyyymmdd" sono d'accordo con @Alex.
 
Ciao
Mat.


lunedì al rientro in ufficio, modifico subito.
Per il formato data, avete ragione è l'unico modo per avere i file in ordine progressivo.
Grazie Alex e Potone.
Giuseppe


Buongiorno e buon inizio settimana.
Ho modificato la variabile mettendo string anzichè date e, volendo ottenere tre tipi di stampe dallo stesso report, ho inserito l'opzione Select Case cambiando per ognuno l'origine del report da codice, ottenendo come nome file " - Stampa elenco completo" (quindi privo di data all'inizio) e la form frmCriteriDiRicerca mi si apre due volte (uno su evento su apertura del report e l'altro credo sul recordsource nel codice sotto riportato).
Il codice è il seguente:
 
Me.Form.Refresh
 
Dim Azienda As String
Azienda = Nz(DLookup("nomeazienda", "tblAziende", "idAzienda=" & IdAzienda))
 
Dim Tipo As String
Tipo = Forms!frmSoci.CboOpzioni
 
Select Case CboOpzioni
 
Case "Stampa Elenco Completo"
On Error Resume Next
 
DoCmd.OpenReport "ElencoSoci", acViewDesign, , , acHidden
Reports!ElencoSoci.RecordSource = "SELECT tblSoci.IdAzienda, tblAziende.NomeAzienda, tblSoci.NSocio, [Cognome] & ' ' & [nome] AS ragionesociale, tblAnagrafica.Datanascita, tblSoci.DataIngresso, TblTipoSocio.DescrSocio, tblAnagrafica.codfisc, tblAnagrafica.Sesso, DateDiff('yyyy',[tblanagrafica].[DataNascita],[forms]![frmcriteridiricerca].[data Fine Trans])+(Format([forms]![frmcriteridiricerca].[data Fine Trans],'mmdd')<Format([tblanagrafica].[DataNascita],'mmdd')) AS Eta, tblMovSoci.Nquote, tblMovSoci.ValQuote, tblSoci.DataRecesso, tblMovSoci.DataIniziale, tblMovSoci.DataFinale" & _
                                  " FROM (tblAnagrafica INNER JOIN (tblAziende INNER JOIN tblSoci ON tblAziende.IDAzienda = tblSoci.IdAzienda) ON tblAnagrafica.IdAnagrafica = tblSoci.IdAnagrafica) INNER JOIN (TblTipoSocio INNER JOIN tblMovSoci ON TblTipoSocio.IDTipoSocio = tblMovSoci.IdTipoSocio) ON tblSoci.ID = tblMovSoci.ID" & _
                                  " WHERE (((tblSoci.IdAzienda) = [Forms]![frmSoci]![IdAzienda]) And ((tblSoci.DataIngresso) <= [Forms]![frmcriteridiricerca].[data Fine Trans]) And ((tblSoci.DataRecesso) Is Null Or (tblSoci.DataRecesso) > [Forms]![frmcriteridiricerca].[data Fine Trans]) And ((tblMovSoci.DataIniziale) <= [Forms]![frmcriteridiricerca].[data Fine Trans]) And ((tblMovSoci.DataFinale) Is Null Or (tblMovSoci.DataFinale) > [Forms]![frmcriteridiricerca].[data Fine Trans]))" & _
                                  " ORDER BY tblSoci.DataIngresso, DateDiff('yyyy',[tblanagrafica].[DataNascita],[forms]![frmcriteridiricerca].[data Fine Trans])+(Format([forms]![frmcriteridiricerca].[data Fine Trans],'mmdd')<Format([tblanagrafica].[DataNascita],'mmdd'));"
 
 
DoCmd.OpenReport "ElencoSoci", acViewPreview
 
Dim Data As String
Data = Format(Forms!frmcriteridiricerca!Data_fine_trans, "yyyymmdd")
 
DoCmd.Save acReport, "ElencoSoci"
DoCmd.Close acReport, "ElencoSoci"
 
 
 
If Len(Dir("U:\" & Azienda & "\Soci\" & "Elenchi Storici", vbDirectory)) = 0 Then
MkDir "U:\" & Azienda & "\Soci\" & "Elenchi Storici"
Else
percorso = "U:\" & Azienda & "\Soci\" & "Elenchi Storici"
DoCmd.OutputTo acOutputReport, "ElencoSoci", acFormatPDF, percorso & "\" & " " & Data & " - " & Tipo & ".pdf"
 
MsgBox "La " & Tipo & " al " & Data & " è stato salvata nella cartella " & percorso
 
DoCmd.Close acReport, "ElencoSoci"
End If
 
Grazie.
Giuseppe


Ciao,
quindi il problema "passare valore data" è risolto?
 
Per il resto che vuoi dire con "...e la form frmCriteriDiRicerca mi si apre due volte"?
Per filtrare l'origine record di un report ci sono metodi un po' più ortodossi: docmd con argomento Where o al limite assegnare tutto il codice sql ad una query che sarà l'origine del report.
Ultima cosa: nuova domanda = nuova richiesta sul gruppo.
 
Ciao
Mat.


No non si è risolto, prima nel nome file metteva 00.00.00 adesso niente.
Poi inserendo l'origine del report da vba, la maschera frmCriteriDiRicerca si apre una prima volta, inserisco la data, continua il codice e me la  riapre e devo inserire nuovamente la data.

 Poi inserendo l'origine del report da vba, la maschera frmCriteriDiRicerca si apre una prima volta, inserisco la data, continua il codice e me la  riapre e devo inserire nuovamente la data.
 
Ciao,
che il problema di assegnazione della data non fosse risolto non si era capito (almeno io).
Comunque:
Quando dici "la maschera frmCriteriDiRicerca si apre" fai riferimento al box di richiesta del valore di un parametro non riconosciuto da Access, non al form con mome "frmCriteriDiRicerca". 
Questo accade perché, rileggendo il codice Sql che hai riportato (tu l'hai riletto?) si vede che hai messo il nome di un controllo probabilmente errato "[Forms]![frmcriteridiricerca].[data Fine Trans]" senza underscore, mentre poco sotto scrivi: Data = Format(Forms!frmcriteridiricerca!Data_fine_trans, "yyyymmdd") con underscore.
Sicuramente uno dei due va corretto: [data Fine Trans] o [Data_fine_trans], probabilmente il primo.
 
Il fatto che l'assegnazione della variabile Data sia vuota mi fa pensare che:
il contenuto di Forms!frmcriteridiricerca!Data_fine_trans sia Null
oppure
contiene un valore ma finchè [Data_fine_trans] non perde il focus (pe. spostando il cursore su un altro controllo o facendo click su un pulsante di comando), tale valore non è ancora assegnato al controllo e di conseguenza la variabile Data non viene inizializzata come ti aspetti.
 
Ciao,
Mat.
 


Allora Mat.
Il controllo della form frmCriteriDiRicerca si chiama "Data fine trans".
Ho modificato la variabile in 
Data = Format(Forms!frmcriteridiricerca![Data fine trans], "yyyymmdd") 
e adesso il nome del file è corretto come lo volevo.
Resta il problema che la form frmCriteriDiRicerca si apre due volte.
Una su evento su apertura della form e l'altra forse richiamata dal codice recordsource del report in Vba.
Dall'evento su apertura del report non lo posso togliere. Bisogna modificare il recordsource?


Credo si apra due volte perchè nel codice vba lo apro due volte:
1) DoCmd.OpenReport "ElencoSoci", acViewDesign, , , acHidden 
 
.....
 
2) DoCmd.OpenReport "ElencoSoci", acViewPreview 
.......


Ciao,
ri-ri-rileggendo il tuo codice trovo un (maledetto) On Error Resume Next 
che è probabilmente la causa del fatto che stiamo qui a scrivere da un giorno intero.
Da dove è spuntato quel comando? nella prima versione che hai postato non c'era!
Quel comando impedisce che il codice vada in errore e quindi anche di capire perché le cose non funzionano.
Per esempio: il famigerato form frmcriteridiricerca è aperto quando il codice viene eseguito?
Da dove lo esegui? form/modulo?
Togli quel On Error Resume Next, meglio un errore di Runtime piuttosto che scervellarsi a causa di un errore che viene ignorato.
 
Mat.


Parole SANTE....
 
@Alex


Nella prima versione l'origine dati non era da vba e il report veniva aperto una sola volta. 
Nella seconda, invece, ho inserito il select case e ho copiato e incollato il codice di un report il cui filtro non è dato da una form che si apre e si chiude su evento apertura e chiusura del report.
Quindi quando apro il report, e gli passo il recordsource da Vba la form è aperto. Poi il report viene salvato, chiuso e riaperto e quindi si riapre la form frmCriteri di ricerca.

Sembra un dialogo tra sordi, ti chiedo una cosa e tu rispondi che frmCriteriDiRicerca si apre due volte, si, questo si è capito.
Provo ad essere più chiaro: riporta tutto il codice coinvolto, nomi di sub compresi, magari si capisce quando viene eseguito.
Non hai messo l'apertura di frmCriteriDiRicerca all'interno di uno degli event handler del report, vero?
Mat.


Ciao Potone.
Non conosco gli event handler del report e da quel che ho capito leggendo qualche sito non dovrebbe essere il mio caso.
Il codice completo cliccando sul pulsante della form di inserimento è:
Private Sub CboOpzioni_AfterUpdate()
 
Me.Form.Refresh
 
Dim Azienda As String
Azienda = Nz(DLookup("nomeazienda", "tblAziende", "idAzienda=" & IdAzienda))
 
Dim Tipo As String
Tipo = Forms!frmSoci.CboOpzioni
 
Select Case CboOpzioni
 
Case "Stampa Elenco Completo"
 
DoCmd.OpenReport "ElencoSoci", acViewDesign, , , acHidden
Reports!ElencoSoci.RecordSource = "SELECT tblSoci.IdAzienda, tblAziende.NomeAzienda, tblSoci.NSocio, [Cognome] & ' ' & [nome] AS ragionesociale, tblAnagrafica.Datanascita, tblSoci.DataIngresso, TblTipoSocio.DescrSocio, tblAnagrafica.codfisc, tblAnagrafica.Sesso, DateDiff('yyyy',[tblanagrafica].[DataNascita],[forms]![frmcriteridiricerca].[data Fine Trans])+(Format([forms]![frmcriteridiricerca].[data Fine Trans],'mmdd')<Format([tblanagrafica].[DataNascita],'mmdd')) AS Eta, tblMovSoci.Nquote, tblMovSoci.ValQuote, tblSoci.DataRecesso, tblMovSoci.DataIniziale, tblMovSoci.DataFinale" & _
                                  " FROM (tblAnagrafica INNER JOIN (tblAziende INNER JOIN tblSoci ON tblAziende.IDAzienda = tblSoci.IdAzienda) ON tblAnagrafica.IdAnagrafica = tblSoci.IdAnagrafica) INNER JOIN (TblTipoSocio INNER JOIN tblMovSoci ON TblTipoSocio.IDTipoSocio = tblMovSoci.IdTipoSocio) ON tblSoci.ID = tblMovSoci.ID" & _
                                  " WHERE (((tblSoci.IdAzienda) = [Forms]![frmSoci]![IdAzienda]) And ((tblSoci.DataIngresso) <= [Forms]![frmcriteridiricerca].[data Fine Trans]) And ((tblSoci.DataRecesso) Is Null Or (tblSoci.DataRecesso) > [Forms]![frmcriteridiricerca].[data Fine Trans]) And ((tblMovSoci.DataIniziale) <= [Forms]![frmcriteridiricerca].[data Fine Trans]) And ((tblMovSoci.DataFinale) Is Null Or (tblMovSoci.DataFinale) > [Forms]![frmcriteridiricerca].[data Fine Trans]))" & _
                                  " ORDER BY tblSoci.DataIngresso, DateDiff('yyyy',[tblanagrafica].[DataNascita],[forms]![frmcriteridiricerca].[data Fine Trans])+(Format([forms]![frmcriteridiricerca].[data Fine Trans],'mmdd')<Format([tblanagrafica].[DataNascita],'mmdd'));"
 
DoCmd.OpenReport "ElencoSoci", acViewPreview
Dim Data As String
Data = Format(Forms!frmcriteridiricerca![Data fine trans], "yyyy_mm_dd")
DoCmd.Save acReport, "ElencoSoci"
DoCmd.Close acReport, "ElencoSoci"
 
If Len(Dir("U:\" & Azienda & "\Soci\" & "Elenchi Storici", vbDirectory)) = 0 Then
MkDir "U:\" & Azienda & "\Soci\" & "Elenchi Storici"
Else
percorso = "U:\" & Azienda & "\Soci\" & "Elenchi Storici"
DoCmd.OutputTo acOutputReport, "ElencoSoci", acFormatPDF, percorso & "\" & "" & Data & " - " & Tipo & ".pdf"
MsgBox "La " & Tipo & " al " & Data & " è stato salvata nella cartella " & percorso
DoCmd.Close acReport, "ElencoSoci"
End If
 
End Select
Me.Opzioni1.SetFocus
 
End Sub
 
Ho eliminato gli altri due select case, per non allungare troppo qui, ma il risultato non cambia.
 
Sul report invece ho:
 
Private Sub Report_Close()
    DoCmd.Close acForm, "frmCriteriDiRicerca"
    DoCmd.Minimize
End Sub
 
 
Private Sub Report_Open(Cancel As Integer)
DoCmd.OpenForm "frmCriteriDiRicerca", , , , , acDialog, "Soci per data"
Not IsLoaded("frmCriteriDiRicerca") Then
Cancel = True
End If
End Sub
 
Giuseppe

Ciao,
invece è proprio il tuo caso, a saperlo prima... Sub Report_Open é l'event handler per l'evento open.
Comunque, sintetizzando:
1 togli completamente l'apertura e la chiusura di frmCriteriDiRicerca dal report (per carità non farlo piú)
2 apri frmCriteriDiRicerca prima della select case
3 prendi il valore selezionato dall'utente e lo memorizzi in una variabile
4 nel codice sql togli i riferimenti frmCriteriDiRicerca e metti direttamente il valore della variabile
5 prosegui col tuo codice, anche se fa spavento il modo che hai scelto per filtrare il report :)
 
In questo modo l'utente seleziona il filtro una sola volta e tu lo riutilizzi piú volte.
 
Ciao
Mat.


Non ho ancora apportato le modifiche che mi hai indicato, ma mi è tutto molto chiaro adesso. Ti ringrazio molto.
 
Giuseppe

 Giuseppe
 
Prego, ciao
Mat.