Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

come bloccare la funzione OGGI()

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

come bloccare la funzione OGGI()

Postdi Oneleven111 » 27/11/17 10:23

Buon giorno a tutti, sono Dario e sono un nuovo utente del sito, ho un problema con un file Excel, ho cercato nel sito argomenti analoghi, ma nello specifico ho trovato qualcosa ma non saprei come adattarlo al mio file.
in breve, ho una scuola di snowboard e dovrei aggiornarlo quotidianamente con dei dati (ore svolte) e in automatico ho inserito delle funzioni per la quale mi viene rilasciata la data di aggiornamento (funzione OGGI()). il problema è che questa data il giorno dopo si aggiorna in automatico al giorno odierno, mentre a me serve sapere quando è stata aggiornato un dato.
Il file, per le mie nozioni di Excel, è complesso, ci sono molti passaggi che ho sviluppato prendendo info qua e la,
ho due casi di data da aggiornare, uno semplice e l'altro un po' più complesso.

il primo caso di data è questo:
Se inserisco un qualsiasi dato nella cella C2, in B2 viene rilasciata la data odierna, e in B2 ho inserito questa funzione =SE(C2="";"";OGGI())
in questo primo caso, non dovendo fare modifiche, la data non dovrebbe aggiornarsi ogni giorno alla data odierna, cosa che invece accade.

nel secondo caso invece ho bisogno di sapere la data dell'ultimo aggiornamento di alcune celle, la data viene aggiornata ogni volta che vengano fatte delle modifiche in queste celle.
=SE((K2)&(L2)&(M2)&(N2)&(O2)&(P2)="";"";OGGI())
In questo caso la data deve rimanere quella di quando è stato fatto l'ultimo l'inserimento, nel momento in cui aggiorno le celle con un nuovo inserimento la data si dovrebbe aggiornare di conseguenza.
Per ora in entrambe i casi, le date allo scoccare della mezzanotte, si aggiornano automaticamente alla data odierna.
Grazie in anticipo per la disponibilità.
Oneleven111
Newbie
 
Post: 7
Iscritto il: 27/11/17 09:26

Sponsor
 

Re: come bloccare la funzione OGGI()

Postdi alfrimpa » 27/11/17 11:45

Ciao Oneeleven

Forse è meglio che alleghi un file di esempio con i dati spiegando quello che vuoi vare.

Tieni presente che per rendere "statica" la funzione OGGI() non è possibile farlo con le formule ma si deve ricorrere al VBA.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1113
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: come bloccare la funzione OGGI()

Postdi Oneleven111 » 27/11/17 12:03

Oneleven111
Newbie
 
Post: 7
Iscritto il: 27/11/17 09:26

Re: come bloccare la funzione OGGI()

Postdi Oneleven111 » 27/11/17 12:06

spero di aver allegato bene il file,
Nel file ci sono tutte le celle con date che si auto compilano all'inserimento di dati in altre celle. ogni data dovrebbe rimanere uguale alla data di inserimento dati, e modificarsi solo nel momento in cui, nei giorni successivi, si vanno ad aggiornare i dati nelle celle.
Oneleven111
Newbie
 
Post: 7
Iscritto il: 27/11/17 09:26

Re: come bloccare la funzione OGGI()

Postdi Oneleven111 » 27/11/17 12:13

Scusate ho alleggerito il file.
https://we.tl/VAgTnVsoRd
Oneleven111
Newbie
 
Post: 7
Iscritto il: 27/11/17 09:26

Re: come bloccare la funzione OGGI()

Postdi Oneleven111 » 27/11/17 13:49

Dimenticavo, il tutto dovra essere ripetibile nelle righe sottostante utilizzando un modulo
Oneleven111
Newbie
 
Post: 7
Iscritto il: 27/11/17 09:26

Re: come bloccare la funzione OGGI()

Postdi Anthony47 » 27/11/17 19:54

Come detto da Alfredo, per farlo bisogna ricorrere al vba, cioe' alle macro.
Potremmo usare questo codice, da inserire nel "Modulo vba" del foglio su cui lavori:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ckArea As String, Cella As Range
'
ckArea = "C2:D1000"         '<<< L'area delle colonne C:D da processare
If Not Application.Intersect(Target, Range(ckArea)) Is Nothing Then
    For Each Cella In Application.Intersect(Target, Range(ckArea))
        If Cells(Cella.Row, "C") <> "" And Cells(Cella.Row, "D") <> "" Then
            Cells(Cella.Row, 2) = Date
        Else
            Cells(Cella.Row, 2).ClearContents
        End If
    Next Cella
Else
    ckArea = "K2:P1000"         '<<< L'area delle colonn K:P da processare
    If Not Application.Intersect(Target, Range(ckArea)) Is Nothing Then
        For Each Cella In Application.Intersect(Target, Range(ckArea))
            If Cella.Value <> "" Then
                Cells(Cella.Row, "Q") = Date
            Else
                If Application.WorksheetFunction.CountA(Application.Intersect(Rows(Cella.Row), Range(ckArea))) _
                  = 0 Then Cells(Cella.Row, "Q").ClearContents
            End If
        Next Cella
    End If
End If
End Sub

Operativamente, partendo da Excel:
a) Tasto destro sul Tab col nome del Foglio a cui il codice va agganciato
b) Scegli Visualizza codice
c) Copia il codice e incollalo nel frame destro della finestra che viene aperta
Le righe marcate <<< vanno personalizzate per indicare quali righe devono essere prese in considerazione.

La data in colonna B viene inserita nel momento in cui ambedue C e D risultano compilate; attenzione, che se cancelli anche una sola delle colonne la data viene cancellata; come pure se editi un valore gia' inserito la data viene riscritta.

La data in colonna Q viene inserita quando si popola una delle colonne K:P, e viene eliminata se tutte le celle in K:P sono vuote. Anche qui va considerato che se editi una cella in K:P allora la data viene riscritta.

Il file andra' poi salvato con estensione .xlsm (macro enabled)

Prova e fai sapere...
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: 15372
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: come bloccare la funzione OGGI()

Postdi Oneleven111 » 28/11/17 11:00

Ciao Anthony, grazie mille per l'aiuto, premesso che non ho mai usato VBA, ho provato a fare dei tentativi nell'inserire le aree come da te evidenziato, ma non va.
Il file in oggetto (che ho allegato), ha una sola riga, ed io per inserire i nuovi cliente, uso il modulo di Excel che progressivamente mi compila anche le righe successive, formando l'elenco di tutti i clienti con le varie opzioni.
Quindi considerato che il file è stagionale e che ogni nuova stagione si ricomincia a zero, pensavo a un massimo di 1000 righe .

Gli aggiornamenti di pagamento o ore di lezione effettuate, li devo inserire direttamente dalla tabella, perché dal Modulo di Excel non ho la possibilità ti fare una ricerca per nome, ma solo "Trova succ.o prec".

Poi oltre alle date sopra indicate, nel file, ci sono altre tre celle "Y";"AB";"AE", che si auto aggiornano con la data di quando vengono inseriti dei dati in una delle due celle che le precedono "W;X" per "Y", "Z;AA" per "AB" e "AC;AD" per "AE". Tradotto in pratica ho bisogno si sapere la data di quando è stato effettuato un pagamento di acconto o cash o pos di ogni singolo cliente.
Anthony spero di essere stato il più chiaro possibile, ti ringrazio ancora per la disponibilità e l'aiuto.
Dario
Oneleven111
Newbie
 
Post: 7
Iscritto il: 27/11/17 09:26

Re: come bloccare la funzione OGGI()

Postdi Anthony47 » 29/11/17 02:54

Ciao Anthony, grazie mille per l'aiuto, premesso che non ho mai usato VBA, ho provato a fare dei tentativi nell'inserire le aree come da te evidenziato, ma non va.
[. . .]
Il file in oggetto (che ho allegato), ha una sola riga, ed io per inserire i nuovi cliente, uso il modulo di Excel che progressivamente mi compila anche le righe successive, formando l'elenco di tutti i clienti con le varie opzioni
Mi spiace, ma l'attivazione del DataModule sospende le gestione delle macro.

Devi quindi trovare un metodo alternativo, che dipende dalla tua conoscenza di Excel, delle macro, eventualmente delle UserForm.
A titolo di esempio, nel file allegato ho inserito due fogli chiamati EDIT e AGGIUNGI:
https://www.dropbox.com/s/fe911z4xqe79h ... .xlsm?dl=0

Nel foglio Edit, tramite formule visualizzo i campi della riga indicata in A1 (mi sono limitato ai primi 7 e mi sono astenuto dall'applicare qualsiasi formattazione per dare un migliore look).
Volendo, si puo' inserire un nuovo valore in colonna B; premendo poi Modifica i valori di colonna B vengono inseriti nella tabella di foglio PH.
Si puo' "Modificare" un valore, ma non Cancellarlo; l'eventuale cancellazione deve essere fatta direttamente sul foglio PH (o sviluppando una pseudo maschera solo per Cancellare)
Il valore in A1 corrisponde all'ultima riga selezionata su foglio PH; puo' essere incrementato /decrementato anche tramite la barra di scorrimento posizionata in A1.

Nel foglio Aggiungi si possono inserire i valori di un nuovo record, e tramite il pulsante Aggiungi si puo' inserire una nuova riga in coda alla tabella preesistente.

Le macro associate ai pulsanti Modifica e Aggiungi sono rispettivamente
Codice: Seleziona tutto
Sub ApplicaMod()
'
For I = 3 To Cells(Rows.Count, "C").End(xlUp).Row
    If Cells(I, 2) <> Cells(I, 3) And Cells(I, 3) <> "" Then
        Sheets("PH").Range("Tabella8[[#Headers],[ID]]").Offset(Range("A1"), I - 2) = Cells(I, 3)
    End If
Next I
Range(Cells(3, "C"), Cells(I, "C")).ClearContents
End Sub

Codice: Seleziona tutto
Sub AggiungiRiga()
Dim I As Long, tRC As Long
'
Sheets("PH").ListObjects("Tabella8").ListRows.Add AlwaysInsert:=True
tRC = Sheets("PH").ListObjects("Tabella8").DataBodyRange.Rows.Count
For I = 4 To Cells(Rows.Count, "B").End(xlUp).Row
    If Cells(I, "B") <> "" Then
        Sheets("PH").Range("Tabella8[[#Headers],[Data Inserimento]]").Offset(tRC, I - 3).Value _
           = Cells(I, "B")
    End If
Next I
Range("B4").Resize(I, 1).ClearContents
End Sub

Ho usato la Convalida per proteggere i campi con formula o il campo Data, che verra' aggiunto dal meccanismo che avevo suggerito ieri man mano che (via macro o per intervento diretto nella Tabella) i campi vengono inseriti, cancellati o modificati.

E' un esempio di come si potrebbe fare.

L'alternativa e' una userform, che pero' e' un oggetto totalmente da programmare nei singoli controlli, quindi puoi percorrere questa alternativa se sei confidente delle tua conoscenze attuali.

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: 15372
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: come bloccare la funzione OGGI()

Postdi Oneleven111 » 01/12/17 09:27

Ciao Anthony, grazie ancora, dai primi consigli che mi hai dato, sono riuscito a tirar fuori quello che mi serviva, allego file, che ne pensi? ho espanso il cod vba che mi hai dato pure per le altre date.
https://we.tl/8wylptZaxn
cosi posso usare modulo Excel e compilare progressivamente la tabella.
Oneleven111
Newbie
 
Post: 7
Iscritto il: 27/11/17 09:26

Re: come bloccare la funzione OGGI()

Postdi Anthony47 » 01/12/17 19:51

Sei tu il miglior tester di quanto hai sviluppato; se funziona per le tue esigenze allora "e' perfetto così" (e' la mia filosofia standard).

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: 15372
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "come bloccare la funzione OGGI()":


Chi c’è in linea

Visitano il forum: Nessuno e 20 ospiti