salva in PDF con giorno dalle 6 alle 6



  • salva in PDF con giorno dalle 6 alle 6.
    di ffante data: 30/06/2016 22:20:14

    buonasera ho un problema con un file con salvataggio in PDF, come è strutturata la macro mi genera il nome del foglio 4 spazi e la data corrente e lo propone per il salvataggio.
    Nel effettuare il salvataggio la macro dato che lavora su tre turni differenti considera il giorno dalle 0 alle 24, avrei la necessità di far considerare il giorno dalle 6 di oggi alle 6 di domani, e mantenere il giorno di oggi anche dopo le 24 fino alle 6 di domani mattina.
    vi ringrazio anticipatamente...

    ho aggiunto file di prova

    franco  
     
    Option Explicit
    Sub Salva_In_PDF()
    
    Sheets("Report").Select
    
    Dim ws As Worksheet
    
    Dim myFile As Variant
    Dim strFile As String
    
    Dim mypath As String
    
    On Error GoTo errReport
    
    mypath = Range("A1").Value
    
    
    Set ws = ActiveSheet
     
    'apre la finestra di dialogo per il salvataggio dei file
    
    'la cartella di default è mypath
    
    strFile = Replace(Replace(ws.Name, " ", ""), ".", " ") _
            & "      " _
            & Format(Now(), "dd-mm-yyyy") _
            & ".pdf"
    
    strFile = mypath & strFile
    
    myFile = Application.GetSaveAsFilename _
            (InitialFileName:=strFile, _
              FileFilter:="PDF Files  (*.pdf),*.pdf", _
              Title:="Seleziona la cartella e inserisci il nome del file da salvare")
     
    If myFile <> False Then
            ws.ExportAsFixedFormat _
              Type:=xlTypePDF, _
              Filename:=myFile, _
              Quality:=xlQualityStandard, _
              IncludeDocProperties:=True, _
              IgnorePrintAreas:=False, _
              OpenAfterPublish:=False
              
            MsgBox "Il Campionamento è stato salvato in PDF.", vbInformation
    
    End If
     
    exitReport:
            Exit Sub
    errReport:
            MsgBox "Non ho potuto salvare il file PDF", vbExclamation
    Resume exitReport
    
    End Sub
    
    
    



  • di Vecchio Frac data: 30/06/2016 23:05:07

    Così a naso mi sembra fattibile ma non mi sbilancio... ci guardo domani ;)





  • di Vecchio Frac data: 01/07/2016 10:59:03

    Da cosa è determinato l'orario per stabilire il turno?
    Cioè dove ricavo l'informazione "siamo prima o dopo le sei del mattino" ? Nel file allegato non trovo traccia di orari. Fai forse riferimento al momento del salvataggio? Non credo.

    Comunque a grandi linee al momento della costruzione del nome di file io ragionerei così:


    se ora(orario) è tra 6 e 23:
    turno = data seriale (anno, mese e giorno corrente)
    altrimenti (cioè se ora(orario) è tra 24 e 6):
    turno = data seriale (anno e mese correnti, giorno precedente)
    nome file = Replace(eccetera) & 4 spazi & Format(turno, "dd-mm-yyyy") & ".pdf"






  • di ffante data: 01/07/2016 15:08:56

    Scusami non ho dato tutte le informazioni, i turni sono così strutturati 6-14 1° turno
    14-22 2° turno,22-6 3° turno.
    All'interno del 1 e 2 turno il salvataggio che vado a fare prende la data del giorno corrente e va bene,per il terzo turno se vado a salvare dalle ore 22:00 alle 24:00 va bene se vado ad effettuare il salvataggio dalle ore 00:00 alle 6:00 il file mi dovrà prendere il giorno corrente -1 giorno.
     
    
    



  • di Vecchio Frac data: 01/07/2016 15:23:38

    Sì, questo era già chiaro (vedi anche il mio post precedente).
    Quello che non è ovvio è: il criterio con il quale stabilire il momento del salvataggio per decidere in che turno ti trovi è il momento in cui premi il pulsante "Salva in PDF"?
    Cioè se premi il pulsante Salva dieci volte durante la mattina, ti troverai dieci file del primo turno? :)





  • di ffante data: 01/07/2016 16:53:33

    Il salvataggio ne verrà effettuato uno ogni fine turno,cioè non è un orario fisso per il 1° turno dalle 13 alle 14, per il 2° dalle 21 alle 22 e per il 3° dalle 5 alle 6,poi c'è la possibilità che ci fermiamo prima e allora gli orari possono variare per tutte le 24 ore.



  • di Vecchio Frac data: 01/07/2016 17:12:15

    Bene, allora la discriminante è "al momento in cui premo il pulsante di salvataggio su pdf".
    Alla luce di questo, e rileggendo il mio post di prima, riesci a modificare il tuo codice di conseguenza? ci vuoi provare?





  • di ffante data: 01/07/2016 17:15:09

    ci vorrei provare, non so se ne sono in grado però al mio paese dicono tentar non nuoce.




  • di Vecchio Frac data: 01/07/2016 17:42:39

    Bè senti visto che botte non ne prendi e ormai sei un nostro affezionato fan, provaci e poi lo discutiamo assieme ^_^





  • di ffante data: 01/07/2016 23:27:20

    Proverei ad iniziare così solo mi da errore, utilizzo non valido di property.




     
    Option Explicit
    Sub Salva_In_PDF()
    
    Sheets("Report").Select
    
    
    Dim ws As Worksheet
    
    Dim myFile As Variant
    Dim strFile As String
    
    Dim Today
    Today = Now
    
    Dim mypath As String
    
    On Error GoTo errReport
    
    mypath = Range("A1").Value
    
    
    Set ws = ActiveSheet
     
    'apre la finestra di dialogo per il salvataggio dei file
    
    'la cartella di default è mypath
    
    Set Now = Now()
    
    If Now >= 6 < 23 Then
    Now
    ElseIf Now >= 0 < 6 Then
    Now -1
    End If
    
    
    strFile = Replace(Replace(ws.Name, " ", ""), ".", " ") _
            & "      " _
            & Format(Now(), "dd-mm-yyyy") _
            & ".pdf"
    
    strFile = mypath & strFile
    
    myFile = Application.GetSaveAsFilename _
            (InitialFileName:=strFile, _
              FileFilter:="PDF Files  (*.pdf),*.pdf", _
              Title:="Seleziona la cartella e inserisci il nome del file da salvare")
     
    If myFile <> False Then
            ws.ExportAsFixedFormat _
              Type:=xlTypePDF, _
              Filename:=myFile, _
              Quality:=xlQualityStandard, _
              IncludeDocProperties:=True, _
              IgnorePrintAreas:=False, _
              OpenAfterPublish:=False
              
            MsgBox "Il Campionamento è stato salvato in PDF.", vbInformation
    
    End If
     
    exitReport:
            Exit Property
    errReport:
            MsgBox "Non ho potuto salvare il file PDF", vbExclamation
    Resume exitReport
    
    End Property



  • di alfrimpa data: 01/07/2016 23:38:42

    Ciao Franco

    Forse ricordo male ma Today e Now non sono parole "riservate" essendo istruzioni VBA?

    Poi non credo si possa scrivere

    Set Now = Now()

    L'istruzione Set si utilizza per valorizzare gli oggetti (Range, Worksheet etc).

    Alfredo






  • di Vecchio Frac data: 01/07/2016 23:42:19


    Set Now = Now()

    If Now >= 6 < 23 Then
    Now
    ElseIf Now >= 0 < 6 Then
    Now -1
    End If


    Now è già una funzione non devi ridefinirla. A te serve l'ora di Now, cioè Hour(Now()).
    Quello che hai scritto nell'If non è VBA ma pseudocodice. Traducilo in VBA (rileggi il mio post precedente):

    If Hour(Now) >= 6 And Hour(Now) <=23 Then
    turno = DateSerial(Year(Now), Month(Now), Day(Now))
    Else
    turno = DateSerial(Year(Now), Month(Now), Day(Now) - 1)
    End If

    strFile = Replace(eccetera) & Space(4) & Format(turno, "dd-mm-yyyy") & ".pdf"






  • di Vecchio Frac data: 02/07/2016 08:09:17

    Alfrimpa dice bene.
    E una volta visto che funziona si può risparmiare codice:

    turno = iif(hour(now)<6, date()-1, date())
    strFile = Replace(Replace(ws.Name, " ", ""), ".", " ") & Format(turno, " dd-mm-yyyy.pdf")

    :)






  • di ffante data: 02/07/2016 14:01:34

    ho fatto le correzioni che mi avete consigliato,

    mi da errore exit property non ammessa in function o sub

    ho inserito il codice

    franco


     
    Option Explicit
    Sub Salva_In_PDF()
    
    Sheets("Report").Select
    
    Dim ws As Worksheet
    
    Dim myFile As Variant
    Dim strFile As String
    
    Dim turno
    
    
    Dim mypath As String
    
    On Error GoTo errReport
    
    mypath = Range("A1").Value
    
    Set ws = ActiveSheet
     
    'apre la finestra di dialogo per il salvataggio dei file
    
    'la cartella di default è mypath
    
    
    turno = IIf(Hour(Now) < 6, Date - 1, Date)
    strFile = Replace(Replace(ws.Name, " ", ""), ".", " ") _
            & "      " _
            & Format(turno, "dd-mm-yyyy") _
            & ".pdf"
    
    
    'strFile = Replace(Replace(ws.Name, " ", ""), ".", " ") _
            & "      " _
            & Format(turno, "dd-mm-yyyy") _
            & ".pdf"
    
    strFile = mypath & strFile
    
    myFile = Application.GetSaveAsFilename _
            (InitialFileName:=strFile, _
              FileFilter:="PDF Files  (*.pdf),*.pdf", _
              Title:="Seleziona la cartella e inserisci il nome del file da salvare")
     
    If myFile <> False Then
            ws.ExportAsFixedFormat _
              Type:=xlTypePDF, _
              Filename:=myFile, _
              Quality:=xlQualityStandard, _
              IncludeDocProperties:=True, _
              IgnorePrintAreas:=False, _
              OpenAfterPublish:=False
              
            MsgBox "Il Campionamento è stato salvato in PDF.", vbInformation
    
    End If
     
    exitReport:
            Exit Property
    errReport:
            MsgBox "Non ho potuto salvare il file PDF", vbExclamation
    Resume exitReport
    
    End Property
    



  • di alfrimpa data: 02/07/2016 14:09:37

    Forse sono io che non capisco ma a che serve

    ExitReport:
    Exit Property?

    Nella macro non vedo nessun

    On Error goto ExitReport

    Alfredo





  • di ffante data: 02/07/2016 14:28:16



    non dovrebbero servire per far la verifica dell'avvenuto salvataggio?



  • di Vecchio Frac data: 02/07/2016 14:33:18

    La domanda è: è codice tuo o lo hai mutuato da un altro esempio? Naturalmente la procedura deve finire con End Sub visto che inizia con Sub. Sembra quasi che appartenesse ad una classe. Ed è così sicuramente :)
    Risolvi semplicemente sostituendo Exit Property e End Property con Exit Sub e End Sub.





  • di Vecchio Frac data: 02/07/2016 14:34:05

    p.s.
    non ti piaceva
    strFile = Replace(Replace(ws.Name, " ", ""), ".", " ") & Format(turno, " dd-mm-yyyy.pdf") 
    ?





  • di ffante data: 02/07/2016 15:04:28

    mi ero affezionato a quello iniziale, un saluto e un ringraziamento per la vostra grande disponibilità e competenza grazie......

    franco da Cori....