Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

rinomina file con data in automatico

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

rinomina file con data in automatico

Postdi miko » 17/06/13 12:49

buon giorno,
sono alle prese con una ricerca che non mi ha dato ancora risultati.
supponiamo si avere un file excel, credo che si parli di workbook, avente il seguente nome:
cartella1 dal 14-05-2012 al 25-06-2013.xls
la colonna B di foglio 1,viene aggiornata,tramite una query web,
e contiene le date nel formato di default di excel, 14/03/2001;
all'apertura del workbook diciamo che l'ultima cella di B è la B35,
che riporta la data 25-06-2013, identica a quella contenuta nel nome del file;
se vi è aggiornamento l'ultima cella di B sarà B41, la cui data immaginiamo sia
28-07-2013;
chiudendo normalmente excel vorrei che in automatico venga mofificato il nome del file
riportando-sostituendo la data finale del nome coincidente con quella contenuta nell'ultima cella di B
e quindi il nome diventi:
cartella1 dal 14-05-2012 al 28-07-2013.xls
in altri termini alla chiusura di excel devo cambiare nome del file con l'ultima data-cella
di colonna B se vi è stato aggiornamento e quindi se diversa da quella già contenuta nel nome.
tra gli eventi non trovo il close ma beforeclose e beforesave;
inoltre nelle mie ricerche ho trovato solo macro nelle quali bisogna impostare directory ed altro ma che devono avviarsi
manualmente come tutte le altre macro;
ne deriva che non è più necessario una macro per il mio scopo, ma è sufficiente chiudere e modificare manualmente
la data nel nome del file.
è possibile realizzare la modifica del nome in automatico?
grazie ciao
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Sponsor
 

Re: rinomina file con data in automatico

Postdi Flash30005 » 17/06/13 13:55

Ho letto più volte il post
ma trovo incongruenze con le date
E' possibile salvare il file con altro nome tramite macro
ed eventualmente eliminare il precedente se non occorre più.

Consiglio comunque un sistema diverso di denominazione file quando si tratta di date:
non gg-mm-aaaa
ma
aaaammgg
per averli come elenco cronologico nelle finestre di Windows (esplora risorse)

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: rinomina file con data in automatico

Postdi miko » 17/06/13 18:41

ciao flash, lieto di "rivederti";
anche io ho riletto il post ma non capisco dove noti l' incongruenza da te citata;
se può essere utile il file che ho inviato nel topic "macro lenta causa formula";
in questo file l'ultima cella di colonna B riporta la data del 15-06-2013;
il nome del file in questo momento sarà : SOMME dal 25-02-2013 al 15-06-2013.xls
se aggiorno il file l'ultima cella riporterà la data del 18-06-2013, ad esempio;
se ora chiudo il file in automatico devo prendere il valore dell'ultima cella di colonna B,
18-06-2013, e modificare il nome del file in : SOMME dal 25-02-2013 al 18-06-2013.xls
la tua soluzione:
salvare il file con altro nome tramite macro
ed eventualmente eliminare il precedente se non occorre più

è anche apprezzabile dal momento che dopo l'aggiornamento il file precedente è inutile.
grazie ciao
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: rinomina file con data in automatico

Postdi Anthony47 » 18/06/13 02:11

Sono assolutamene scettico sulla capacita' di una webquery di mettere sul foglio excel una data nel formato corretto.
Cio' detto, se il rischio di ottenere risultati sballati non ti preoccupa, puoi usare una macro di Workbook_BeforeSave, ad esempio:
Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Not IsDate(Cells(Rows.Count, "B").End(xlUp).Value) Then Exit Sub
Application.EnableEvents = False
Application.DisplayAlerts = False    '!!! Vedi Testo
    NewFName = Left(ThisWorkbook.FullName, Len(ThisWorkbook.FullName) - Len("28-07-2013.xls")) & _
        Format(Cells(Rows.Count, "B").End(xlUp).Value, "dd-mm-yyyy") & ".xls"
    ThisWorkbook.SaveAs Filename:=NewFName
    Cancel = True
    MsgBox ("Salvato file, nome corrente: " & vbCrLf & NewFName)
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
Va inserita nel modulo ThisWorkbook
L' istruzione marcata '!!! consente di salvare con un nome file gia' in uso senza nessun messaggio di warning; se la cosa non ti piace (cioe' vuoi poter evitare di salvare con un nome file gia' in uso) devi cancellare l' intera riga.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: rinomina file con data in automatico

Postdi miko » 18/06/13 12:08

ciao,
ho trascorso la mattinata a modificare la tua macro per ottenere il risultato che vorrei,
ma dopo tante modifiche, consultando esempi trovati in rete e l'help, il risultato ottenuto
è che non trovo più da nessuna parte i file che dice di salvare.
la tua macro funziona ma noto 3 particolarità:
1) commentando oppure no la linea che hai evidenziato non noto alcuna differenza;
in tutti i casi compare prima il messaggio di excel che chiede se salvare o meno le modifiche
apportate al file, e successivamente il messaggio che hai inserito nella macro.
2) il file viene salvato in una altra cartella diversa da quella del file iniziale;
3) il nome del file che viene salvato è troncato;
esso è formato infatti con una parte del nome della cartella in cui si trova
il file iniziale e con la data della cella, e non viene per niente considerato il nome del file.
se ad esempio il file ha il nome MACRO ANTHONY del 18-06-2013.xls, la cartella si chiama PC-FACILE, contenuta nella cartella K\EXCEL,
il file salvato lo ritrovo in K\EXCEl, e non in K\EXCEL\PC-FACILE, con il nome PC-FA15-06-2013.xls;
quello che provando a modificare cerco di ottenere è che il risultato finale sia:
nome file: MACRO ANTHONY del 15-06-2013.xls
nella cartella K\EXCEL\PC-FACILE , stessa cartella del file origine.
ho provato ad inserire ad inizio macro directory e vecchio nome ma non funziona.
ciao grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: rinomina file con data in automatico

Postdi ricky53 » 18/06/13 12:18

Ciao,
per aiutarci a capire e, quindi, poterti aiutare dovresti inviare il codice che hai utilizzato.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: rinomina file con data in automatico

Postdi Anthony47 » 18/06/13 13:40

La macro non avrebbe bisogno di essere modificata per produrre il risultato richiesto (salvo errori :D ).
Se parti dal nome K:\EXCEL\PC-FACILE\MACRO ANTHONY del 18-06-2013.xls e in colonna B l' ultima data e' 15 giugno 2013, il nuovo filename dovrebbe essere K\EXCEL\PC-FACILE\MACRO ANTHONY del 15-06-2013.xls, come calcolato dall' istruzione
Codice: Seleziona tutto
    NewFName = Left(ThisWorkbook.FullName, Len(ThisWorkbook.FullName) - Len("28-07-2013.xls")) & _
        Format(Cells(Rows.Count, "B").End(xlUp).Value, "dd-mm-yyyy") & ".xls"
E' possibile che hai modificato proprio questo spezzone?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: rinomina file con data in automatico

Postdi miko » 18/06/13 18:27

buona sera,
una precisazione,che ho dimenticato in precedenza, e se ho interpretato il tuo dubbio riguardo a:
Sono assolutamene scettico sulla capacita' di una webquery di mettere sul foglio excel una data nel formato corretto.

subito dopo il codice della query web ho inserito questa linea di codice:
Codice: Seleziona tutto
.Columns("B:B").NumberFormat = "m/d/yyyy"

e pare che funzioni in quanto selezionando una qualunque cella di colonna B
e poi menu-formato-celle-numero ottengo data-del tipo default di excel(2003): 14-03-2001.
per quanto attiene al problema del topic, la macro che ho usato è quella originale di Anthony;
poichè la macro non produce il risultato atteso ho modificato la parte di codice che Anthony ha evidenziato
nel suo ultimo messaggio.
vi descrivo i vari passaggi considerando una situazione reale e concreta;
ho preso il file inviatovi nell'altro topic: somme.xls;
PERCORSO E NOME FILE del file origine:
K:\1 EXCEL\1 FILE X FORUM\SOMME.xls
apro il file, inserisco la macro, originale, nel modulo ThisWorkbook;
chiudo excel ;
compare il primo messaggio che chiede di salvare o meno le modifiche al file;
clicco si;
dopo qualche secondo appare un secondo messaggio, quello della macro, che recita:
salvato file, nome corrente:
K:\1 EXCEL\1 FILE X FO15-06-2013.xls
nel nome del file vi è effettivamente la data dell'ultima cella di colonna B, 15-06-2013,
ma è cambiato percorso, cartella e nome file.
apro il file generato e noto che il contenuto, valori di celle, fogli, etc è identico a quello di origine
tranne che per la macro anthony che salva il file presente solo nel file salvato.
quest'ultimo passo mi sembra ovvio visto che genera un altro file.
fin qui ripeto che uso la macro originale senza modifiche e si tratta di situazione reale.
sto riprovando le modifiche alla ricerca di una, purtroppo non ricordo esattamente cosa ho fatto,
che mi generava il file nella stessa cartella di origine, ma con un nome errato del tipo:
K:\1 EXCEL\1 FILE X FORUM\SOMME15-06-2013.xlsSOMME15-06-2013.xls
tra le tante modifiche che ho fatto non ricordo come sono giunto a questo risultato.
vediamo cosa riesco a produrre.
ciao grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: rinomina file con data in automatico

Postdi Anthony47 » 19/06/13 12:08

Devi partire da un file che è già nominato nel formato che avevi detto, poi la mia macro potrà rinominare il file secondo la data che trova. Se parti con un nome file con diversa struttura la macro darà un risultato prevedibile ma diverso da quanto tu ti aspetti.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: rinomina file con data in automatico

Postdi miko » 19/06/13 20:42

ciao,
hai ragione, hai intuito quale era il mio problema:
Devi partire da un file che è già nominato ...

mi ero rimbambito a trovare una soluzione evidente, e finalmente
ci sono arrivato, ma mi hai preceduto.
la tua macro funziona benissimo, qualunque sia il nome del file;
è importante che nel nome del file sia contenuta questa stringa:
"dal 12-05-2009 al 23-06-2013" senza apici, con date a piacere;
ciò che precede questa stringa può essere una qualunque altra
stringa anche insignificante come D1FjE12.
nell'attesa di una tua risposta, facendo prove ho realizzato questa altra versione,
usando il tuo codice;
vorrei sottoporla al vostro giudizio ed analisi:
Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim sFolder As String
Dim sFilename As String

sFolder = ThisWorkbook.Path
sFilename = Left(ThisWorkbook.FullName, _
            Len(ThisWorkbook.FullName) - _
            Len("28-07-2013.xls")) & _
            Format(Cells(Rows.Count, "B") _
            .End(xlUp).Value, "dd-mm-yyyy")

On Error Resume Next
 
 If Not IsDate(Cells(Rows.Count, "B") _
         .End(xlUp).Value) Then Exit Sub

Application.EnableEvents = False
Application.DisplayAlerts = False
 
  'FACCIAMO COINCIDERE LA DIRECTORY CON QUELLA STABILITA IN sFolder
  'SE VI E' ERRORE SARA' CREATA LA CARTELLA
   ChDir (sFolder)
  'SE LA CARTELLA NON ESISTE USCIAMO DALLA ROUTINE
  If Err.Number = 76 Then
     Exit Sub
  Else
    With ThisWorkbook
      '.SaveAs Filename:=(sFilename)
    'OPPURE
       .SaveAs (sPath & sFilename)  '<<<<<<<
    End With
   Cancel = True
    MsgBox ("Salvato file, nome corrente: " & vbCrLf & sFilename)
Application.EnableEvents = True
Application.DisplayAlerts = True
End If
End Sub

la macro funziona, ma ho dei dubbi sulla correttezza.
ho notato due particolari:
nella tua macro non si fa riferimento al foglio che contiene le date;
sono abituato a scrivere:
Codice: Seleziona tutto
worksheets("Foglio1").range("B1").value=...
oppure
with worksheets("Foglio1")
.range("B1").value=...
end with

per test ho inserito anche in altri fogli la colonna B con le date, variandole, e tutto funziona
normalmente come se gli altri fogli non contenessero date.
nella mia versione invece se scrivo la linea marcata nella forma:
.SaveAs (sFolder & sFilename)
la macro funziona ugualmente, ma se riapro il file salvato la linea precedente
la ritrovo nella forma:
.SaveAs (sPath & sFilename)
ed anche questo non riesco a spiegarmelo.
grazie saluti
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: rinomina file con data in automatico

Postdi Anthony47 » 20/06/13 11:44

Mi stupisci sempre...
nella tua macro non si fa riferimento al foglio che contiene le date
Infatti hai individuato, lavorando solo sul codice, un clamoroso baco di quanto ti ho proposto.
Infatti, date le modalita' di intervento della macro, e' necessario specificare il foglio; sostituisci l' intera Workbook_BeforeSave con questa versione:
Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
With Sheets("Foglio2")     '<<<<
If Not IsDate(.Cells(Rows.Count, "B").End(xlUp).Value) Then Exit Sub
Application.EnableEvents = False
Application.DisplayAlerts = False    '!!!
    NewFName = Left(ThisWorkbook.FullName, Len(ThisWorkbook.FullName) - Len("28-07-2013.xls")) & _
        Format(.Cells(Rows.Count, "B").End(xlUp).Value, "dd-mm-yyyy") & ".xls"
    ThisWorkbook.SaveAs Filename:=NewFName
    Cancel = True
    MsgBox ("Salvato file, nome corrente: " & vbCrLf & NewFName)
Application.EnableEvents = True
Application.DisplayAlerts = True
End With
Saved = True
End Sub

Devi personalizzare la riga marcata <<<<

Quanto alla macro che hai pubblicato, probabilmente funziona ma contiene delle cose inconsistenti, del tipo:
1) nelle istruzioni
Codice: Seleziona tutto
       ChDir (sFolder)
      'SE LA CARTELLA NON ESISTE USCIAMO DALLA ROUTINE
      If Err.Number = 76 Then
         Exit Sub

Poiche' sFolder e' compilata con ThisWorkbook.Path non puo' che esistere.
2) Inoltre poiche' sFilename e' generato partendo da ThisWorkbook.FullName, inglobando quindi sia path che name, la stessa istruzione ChDir (sFolder) non serve.
3) Inoltre se usi .SaveAs (sPath & sFilename), il salvataggio corretto si ottiene solo perche' sPath, non essendo mai stato compilato, e' vuoto.
4) Inoltre e' alquanto pericoloso l' uso indiscriminato di On Error Resume Next, che nasconde tutti gli errori sotto il tappeto.
5) questo spiega, mettendo insieme il punto 3 e 4, perche' se usi .SaveAs (sFolder & sFilename) "qualcosa di strano accade": poiche' sFolder e' compilato, il concatenamento con sFilename genera un frankstein che fara' fallire la SaveAs senza che la macro lo segnali e lasciandoti quindi nella convinzione che il salvataggio sia regolarmente avvenuto.

Questo spiega anche come, nelle prove, hai ottenuto altri "risultati frankstein", tipo
K:\1 EXCEL\1 FILE X FORUM\SOMME15-06-2013.xlsSOMME15-06-2013.xls

Quanto allo stile, personalmente trovo sadico e probabilmente anche masochista chi sponsorizza l' uso della hungarian notation (quella per cui una variabile tipo String, ad esempio, deve essere preceduta dal prefisso "s", tipo sFolder)

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: rinomina file con data in automatico

Postdi miko » 22/06/13 19:42

buona sera,
se il tuo stupore è in senso positivo ne sono gratificato, se invece è negativo
mi rammarico di non essere un buon allievo.
la tua macro ovviamente funziona.
grazie per la routine ed i chiarimenti relativi alla mia errata macro.
ciao buona domenica
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: rinomina file con data in automatico

Postdi Anthony47 » 23/06/13 10:46

Ovviamente lo stupore era positivo, vista l' analisi che avevi fatto...
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: rinomina file con data in automatico

Postdi miko » 23/06/13 19:10

buona sera,
grazie ancora per tutto.
alla prossima.
ciao
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44


Torna a Applicazioni Office Windows


Topic correlati a "rinomina file con data in automatico":


Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti