Risultati da 1 a 12 di 12

Discussione: Inserire data e ora in automatico che rimangono fisse (Evento Change e metodo Intersect)



  1. #1

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7147
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2063
    Likes dati
    1300

    Inserire data e ora in automatico che rimangono fisse (Evento Change e metodo Intersect)

    E’ stato chiesto in più occasioni come fare per inserire in Excel la data e/o l’ora automaticamente e per tale scopo la formule utilizzate sono = OGGI() e = ADESSO().

    Queste formule presentano però l’inconveniente che col trascorrere del tempo modificheranno il risultato riportando la data e l’ora del momento.

    E’ assolutamente inutile aiurarsi con altre formule per cercare di bloccarle; bisogna rassegnarsi non è possibile farlo!

    Ecco allora che ci viene in aiuto il vba!

    Nell’esempio che vi propongo prevedo che inserendo dei dati nella colonna A si inseriscano in automatico il giorno nella colonna B e l’ora nella colonna C al momento dell’inserimento e restino fisse per sempre!

    Tra i vari modi ho scelto il seguente che vi propongo.

    Apro l’editor vbe e faccio doppio click nel foglio corrispondente a quello che voglio utilizzare per l’inserimento automatico dei giorni e delle ore.

    Scelgo l’evento Change con l’indirizzo di proprietà dell'oggetto Range (Target, che rappresenta un intervallo)

    Codice: 
    Private Sub Worksheet_Change(ByVal Target As Range)
    Il metodo che si utilizza in questi caso è Intersect per verificare se un intervallo (Target in questo caso) interseca un intervallo denominato

    Codice:

    Codice: 
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim uRiga As Long
            uRiga = Range("A" & Rows.Count).End(xlUp).Row
                  If Not Intersect(Target, Range("A1" & ": A" & uRiga)) Is Nothing Then
                        Application.EnableEvents = False
                            Target.Offset(0, 1) = Date
                            Target.Offset(0, 2) = Format(Now, "hh:mm")
                        Application.EnableEvents = True
                 End If
    End Sub
    Codice commentato:

    Codice: 
    Private Sub Worksheet_Change (ByVal Target As Range)
      Dim uRiga As Long ‘Dichiaro le variabili
        uRiga = Range("A" & Rows.Count).End(xlUp).Row ‘ Trovo l’ultima riga piena della colonna A
           If Not Intersect(Target, Range("A1" & ": A" & uRiga)) Is Nothing Then ‘Se non si intersecano (Target, Range ( "A1: A"Ultima Riga)) è niente, allora…
             Application.EnableEvents = False 'disabilito gli eventi per evitare ricorsività dell'evento Change
                Target.Offset(0, 1) = Date ‘Partendo dalla colonna A (Target) scarto 1 colonna a destra per mettere la data nella colonna B
                Target.Offset(0, 2) = Format(Now, "hh:mm") ‘Partendo dalla colonna A (Target) scarto 2 colonne a destra per mettere l’ora nella colonna B (che formatto in “hh:mm”)
            Application.EnableEvents = True ' riabilito gli eventi
     End If
    End Sub
    Sull'evento Change
    Dal menu a tendina l'evento selezionabile contenente la parola "Change" è:
    Codice: 
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    L'evento "SelectionChange" si verifica quando si seleziona o si clicca su una cella diversa da quella attualmente selezionata, e quindi in pratica sempre, compreso un inserimento valore o modifica valore, perchè comunque si deseleziona la cella in questione per attivare la modifica, selezionandone un altra.

    L'evento "Change" si verifica invece quando si inserisce un valore o si effettua una modifica, premendo invio, altrimenti non si verifica.

    Su metodo Intersect
    Il metodo Intersect richiede che siano specificati due oggetti Range come argomenti.

    Il primo argomento inserito è l’oggetto Target e individua la cella o l’intervallo modificato, il secondo argomento è l’oggetto Range (poniamo per esempio il range (A1:A10)

    Per attivare l’evento si prevede che vi sia l'intersezione tra la cella modificata (Target) e il range (A1:A10) quindi se questi non si verifica (Is Nothing) non succede nulla.

    Il codice sarebbe così:

    Codice: 
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Intersect(Target, Range("A1")) Is Nothing Then
    Exit Sub
                Else  
    ……
    End Sub
    Per evitare il passaggi sopra si può scrivere con la negazione, così
    Codice: 
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
    ……
    End Sub
    File Allegati File Allegati
    Ultima modifica fatta da:ges; 31/07/16 alle 14:23 Motivo: Inserito gestione eventi
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  2. I seguenti 6 utenti hanno dato un "Like" a ges per questo post:


  3. #2
    L'avatar di Irclen
    Clicca e Apri
    Data Registrazione
    Jul 2016
    Località
    Quarrata
    Età
    48
    Messaggi
    165
    Versione Office
    Office2016
    Likes ricevuti
    5
    Likes dati
    7

    Re: Inserire data e ora in automatico che rimangono fisse (Evento Change e metodo Intersect)

    Ges, piacere mi è piaciuto ma ***** miseria se è complicato il VBA, sarà per l'inglese, ma l'ho letto e riletto e non ho immagazzinato niente. :( Mi sono arreso e ho fatto copia incolla della parte centrale, scusa se ti chiedo una cosa, ma va scritta tutta a mano?

  4. #3

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7147
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2063
    Likes dati
    1300

    Re: Inserire data e ora in automatico che rimangono fisse (Evento Change e metodo Intersect)

    Ciao Irclen,
    non devi scriverlo a mano, basta che lo copi e lo incolli.

    L'importante è che lo incolli nel modulo di classe del foglio interessato.

    Nel mio caso nel Foglio1

    Apri l'editor vba e fai doppio click su Foglio1 e lo incolli nella finestra bianca che si apre.

    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  5. #4
    L'avatar di Irclen
    Clicca e Apri
    Data Registrazione
    Jul 2016
    Località
    Quarrata
    Età
    48
    Messaggi
    165
    Versione Office
    Office2016
    Likes ricevuti
    5
    Likes dati
    7

    Re: Inserire data e ora in automatico che rimangono fisse (Evento Change e metodo Intersect)

    Quello lo ho gia fatto, ma dicevo per crearlo il codice va scritto a mano apparte quello che l'editor VBA ti rende in automatico.

  6. #5

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7147
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2063
    Likes dati
    1300

    Re: Inserire data e ora in automatico che rimangono fisse (Evento Change e metodo Intersect)

    Eh si, il codice va scritto a mano, non mi risulti vi sia un programma che in cui indicando gli obiettivi scriva il codice in automatico.

    Un metodo - molto utile - è usare il registratore di macro che registrando i passaggi che fai scrive il codice.
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  7. #6
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3340
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49

    Re: Inserire data e ora in automatico che rimangono fisse (Evento Change e metodo Intersect)

    Ciao Ges ottimo. Come al solito io cerco sempre le pulci

    Target.Offset(0, 2) = Format(Now, "hh:mm") ‘Partendo dalla colonna A (Target) scarto 2 colonne a destra per mettere l’ora nella colonna B (che formatto in “hh:mm”)


    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  8. #7

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7147
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2063
    Likes dati
    1300

    Re: Inserire data e ora in automatico che rimangono fisse (Evento Change e metodo Intersect)

    Ciao Baloon,
    sempre un piacere leggerti.

    Questa che hai trovato però non è una pulce ( e nemmeno un pulcino ) si capisce benissimo che è semplicemente un refuso: due colonne a destra dopo la A è chiaramente la C (anche se ho scritto B).
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  9. #8

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2808
    Versione Office
    Excel 2013
    Likes ricevuti
    1020
    Likes dati
    979

    Re: Inserire data e ora in automatico che rimangono fisse (Evento Change e metodo Intersect)

    Ciao @ges, anch'io come @Baloon_50 (che saluto) cerco sempre le pulci ma la scrittura sul foglio genera un altro evento "Worksheet_Change" che è meglio disattivare con:
    Codice: 
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim uRiga As Long
    
    
    uRiga = Range("A" & Rows.Count).End(xlUp).Row
    If Not Intersect(Target, Range("A1" & ": A" & uRiga)) Is Nothing Then
        Application.EnableEvents = False
        Target.Offset(0, 1) = Date
        Target.Offset(0, 2) = Format(Now, "hh:mm")
        Application.EnableEvents = True
    End If
    End Sub

  10. #9

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7147
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2063
    Likes dati
    1300

    Re: Inserire data e ora in automatico che rimangono fisse (Evento Change e metodo Intersect)

    Ciao Rubik,
    forse ti è sfuggito che h'o già fatta questa modifica; nel primo post, leggi "Ultima modifica fatta da:ges; 31/07/16 alle 13:23 Motivo: Inserito gestione eventi"
    Comunque, grazie lo stesso per la segnalazione.
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  11. #10
    L'avatar di andry
    Clicca e Apri
    Data Registrazione
    May 2017
    Località
    salerno
    Età
    71
    Messaggi
    10
    Versione Office
    365
    Likes ricevuti
    0
    Likes dati
    0

    Re: Inserire data e ora in automatico che rimangono fisse (Evento Change e metodo Intersect)

    Buongiorno a tutto il Forum, in particolare a Ges che come mi pare di capire ne è il fondatore, qui trovo molte cose davvero utili anche per l'uso normale di Office sopratutto Excel, ho scaricato il file per con la data e l'ora non modificabile e per me è davvero utile quando avendo svariati libri che presto agli amici/parenti metto il loro nome ed appare la data e l'ora del prestito. Ma mi sarebbe altrettanto utile nella stessa pagina avere più a destra la stessa situazione per il giorno e l'ora della restituzione ed in più anche una colonna corrispettiva dove finché non si verifica l'evento della restituzione appaia la scritta in rosso libro non reso. Chiedo troppo? Grazie a chi vorrà aiutarmi Andry

  12. #11

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    64
    Messaggi
    6800
    Versione Office
    2013
    Likes ricevuti
    720
    Likes dati
    165

    Re: Inserire data e ora in automatico che rimangono fisse (Evento Change e metodo Intersect)

    Ciao Andry

    Premesso che il fondatore del forum è Gerardo Zuccalà e non Ges (saluto entrambi) ti consiglierei di postare la tua domanda nella sezione "Domande su Excel in generale" o in "Domande su Excel VBA e macro" qualora prevedi si debba usare il VBA.

    A corredo della tua richiesta dovresti allegare anche un file di Excel di esempio con dat, spiegazione e risultato desiderato inserito a mano.

    Buona permanenza nel forum.
    Alfredo

    "Non esistono cose facili o difficili; esistono cose che si sanno e cose che non si sanno"

    "Solo due cose sono infinite: l'universo e la stupidità umana; riguardo l'universo ho ancora dei dubbi" (Albert Einstein)

  13. #12
    L'avatar di andry
    Clicca e Apri
    Data Registrazione
    May 2017
    Località
    salerno
    Età
    71
    Messaggi
    10
    Versione Office
    365
    Likes ricevuti
    0
    Likes dati
    0

    Re: Inserire data e ora in automatico che rimangono fisse (Evento Change e metodo Intersect)

    Grazie Alfredo per la pronta risposta e relativo suggerimento, farò senz'altro come mi hai scritto, approfitto di salutare oltre che il vero fondatore Gerardo Zuccalà sia Ges di cui credevo fosse il nik del primo e col quale mi scuso e risaluto, uniti a quelli rivolti anche a te. Buona giornata a tutti, Andry

Discussioni Simili

  1. Copia incolla automatico o metodo per velocizzare l'estrazione di dati
    Di luctsi nel forum Domande su Excel in generale
    Risposte: 19
    Ultimo Messaggio: 14/07/17, 14:31
  2. Workshetet Change
    Di CESARE2017 nel forum Domande su Excel VBA e MACRO
    Risposte: 4
    Ultimo Messaggio: 27/06/17, 10:43
  3. [Risolto] Come inserire i colori in automatico
    Di ferroza nel forum Domande su Excel in generale
    Risposte: 27
    Ultimo Messaggio: 13/12/16, 01:43
  4. Inserire data odierna o un'altra data.
    Di Laura Belli nel forum Domande su Excel VBA e MACRO
    Risposte: 17
    Ultimo Messaggio: 02/09/16, 09:16
  5. Inserire nuovi valori in automatico
    Di great-tech nel forum Foglio di calcolo su altre Piattaforme
    Risposte: 1
    Ultimo Messaggio: 03/04/16, 10:32

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •