Macro controllo ora



  • Macro controllo ora
    di 4ng3lus (utente non iscritto) data: 11/11/2009

    Salve a tutti, sono nuovo del forum e di macro per excel. avrei la necessità di creare un campo data/ora al quale viene assegnato in automatico data e orario dell'avvenuto inserimento di dati all'interno di un altra cella. es. avrò la colonna "esito" e la colonna "data/ora". nel momento in cui scrivo "positivo" su "esito" e confermo, il campo "data/ora deve riempirsi con la data e l'ora del momento stesso in cui ho confermato l'inserimento. penso di essere stato chiaro. spero in un vostro aiuto. grazie



  • di Franco_44 (utente non iscritto) data: 11/11/2009

    Ciao
    mettiamo che la colonna "esito" vada da a2:in basso, e la colonna data/ora (scegli il formato data 14/3/01 13.30)da b2: in basso; in c2 scrivi =se(a2="pos";adesso();"") e trascina in basso fin dove hai bisogno
    la coppia di doppi apici ti lascia la cella vuota se il dato nella cella a non corrisponde a pos (o quello che decidi tu), e se vuoi qualcos'altro basta tu lo inserisca tra gli apici



  • di Rp71 (utente non iscritto) data: 11/11/2009

    La funzione "adesso()" usata in formula è volatile e non si può usare in questo caso xchè ad ogni variazione sul foglio si autoaggiorna.
    bisogna usare x forza una macro che scrive il valore di "adesso()"
    ... del tipo if range a2 = "pos" then range b2 = now() e associarla ad un evento come il worksheet selection change ...


  • Macro controllo ora
    di 4ng3lus (utente non iscritto) data: 16/11/2009

    Mmmh scusatemi ma come ho detto sono spratico di macro... quindi di preciso cosa dovrei fare??


  • Prova
    di Rp71 (utente non iscritto) data: 16/11/2009

    Premesso che non sono esperto di vba ti suggerisco di provare il codice riportato.
    presupposto perchè funzioni è che la cella di intestazione della colonna esito venga "nominata" (menù: inserisci > nome > definisci ...) "esito" e che in esito venga scritto "pos" x dire positivo (altrimenti modificare codice).
    per fare un lavoro più completo bisognerebbe prevedere anche che cosa deve fare il programma nel caso si andasse a modificare/cambiare valori già scritti oppure se si dovesse andare a scrivere una parola errata, ecc...
     
    Private Sub Worksheet_Change(ByVal Target As Range)
      On Error GoTo fine
      Nc = Target.Column: Nr = Target.Row
      If Nr <= Range("esito").Row Then Exit Sub
      If Nc = Range("esito").Column Then
        If Target.Value = "pos" And Target.Offset(0, 1) = 0 Then
                Target.Offset(0, 1) = Now()
        End If
      End If
    fine:
    End Sub


  • Macro controllo ora
    di 4ng3lus (utente non iscritto) data: 17/11/2009

    Lo stesso deve avvenire qualsiasi esito io inserisca. sia che sia positivo, negativo o altro.


  • ...
    di Rp71 (utente non iscritto) data: 17/11/2009

    ... beh ... a questo punto sostituisci

    = "pos"

    con

    <> 0

    cioè diverso da zero
    fai sapere se funzia


  • Macro controllo ora
    di 4ng3lus (utente non iscritto) data: 18/11/2009

    è possibile creare un menù a tendina con 4 possibili risultati per "esito".. ed una volta selezionata una delle 4 voci fare in modo che in automatico si inserisca data e ora nella casella data ora corrispondente?


  • ...
    di Rp71 (utente non iscritto) data: 18/11/2009

    ... sempre dal basso della mia conoscenza del codice vba proverei la soluzione riportata (allego anche un file di esempio)
    * premesse
    nel tuo caso utilizzerei l'utility "convalida" :
    menù > dati, convalida, impostazioni, consenti ,elenco ...
    se utilizzi e adatti il codice sotto, la prima imputazione che fai deve essere manuale ... poi scatta l'automatismo del "copia impostazioni convalida" ...

    * sarebbe + facile gestire imputazioni automatizzate/meccanizzate e controlli con machere/form , combobox ...

    fai sapere ...
     
    Private Sub Worksheet_Change(ByVal Target As Range)
      On Error GoTo fine
      Nc = Target.Column: Nr = Target.Row
      If Nr <= Range("esito").Row Then Exit Sub
      If Nc = Range("esito").Column Then
        If Target.Value <> 0 And Target.Offset(0, 1) = 0 Then
                Target.Offset(0, 1) = Now()
                
                Target.Offset(1, 0).Select
                With Selection.Validation
                    .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="positivo, negativo, sospeso"
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .InputTitle = ""
                    .ErrorTitle = ""
                    .InputMessage = ""
                    .ErrorMessage = ""
                    .ShowInput = True
                    .ShowError = True
                End With
                
        End If
      End If
    fine:
    End Sub


  • Macro controllo ora
    di 4ng3lus (utente non iscritto) data: 18/11/2009

    è possibile creare un menù a tendina con 4 possibili risultati per "esito".. ed una volta selezionata una delle 4 voci fare in modo che in automatico si inserisca data e ora nella casella data ora corrispondente?


  • Macro controllo ora
    di 4ng3lus (utente non iscritto) data: 18/11/2009

    Ho già creato il menà a tendina... adesso devo fare la procedura che mette data e ora nella cella data/ora nel momento in cui seleziono la voce dal menù a tendina.


  • ...
    di Rp71 (utente non iscritto) data: 18/11/2009

    Scusa, ma le leggi le risposte ? provi le soluzioni proposte ?
    se non dai un feedback e non ti spieghi meglio risulta un po' difficile aiutare.
    saluti


  • Macro controllo ora
    di 4ng3lus (utente non iscritto) data: 20/11/2009

    Scusami adesso provo la tua soluzione. sei stato gentilissimo. nel momento in cui ho postato non visualizzavo la tua risposta!


  • Macro controllo ora
    di 4ng3lus (utente non iscritto) data: 30/11/2009

    Su office 2007 non riesco a trovare da dove associare la procedura in excel :s
    deve essere associata alla cella data/ora o a quella esito? intanto ho creato la tendina con i quattro esiti "sospeso, negativo, positivo, richiamare" tramite dati/convalida (gli ho associato l'elenco di valori della colonna aa in cui ho inserito i 4 possibili valori).



  • di Rp71 (utente non iscritto) data: 01/12/2009

    Segui questi passi:
    1. dimentica quello che hai già fatto
    2. associa il nome "esito" alla cella di intestazione della colonna dove riporti l'esito (menù: inserisci > nome > definisci ... "esito")
    3. entra nel vba del foglio e copia integralmente la 2^ soluzione che ti ho postato.
    4. prima di copiarla aggiungi all'elenco degli esiti anche "richiamare"
    5. stop
    6. come far partire il tutto ?
    7. vai nella prima cella libera sotto l'intestazione di colonna "esito" e scrivi manualmente "positivo"
    8. da lì parte (dovrebbe partire) il tutto ...
    9. prova
    r