Creazione Macro inserimento data
Hai un problema con Excel? 
Creazione Macro inserimento data
di ITFabio (utente non iscritto) data: 04/08/2015 16:25:00
Buongiorno,
ho un foglio di excel dove vorrei avere una macro che se io inserisco un valore nella cella A1 nella cella C1 venga inserita la data. Sono riuscito a fare questa prima parte, tuttavia come faccio a replicarla in modo automatico per tutte le celle della colonna A sulle rispettive celle della colonna C?
Grazie in anticipo
Fabio
Sub NUMDate()
If Range("A4") <> "" Then
If Range("C4") = "" Then
Range("C4") = Now()
Else
MsgBox "c'è già la data" 'msg momentaneo per test
End If
Else
MsgBox "inserire valore" 'msg momentaneo per test
End If
End Sub
Parte non Funzionante:
in Workbook
Sub Workbook_Open()
ChangeRange
End Sub
in Worksheet
Sub Worksheet_Change(ByVal Target As Range)
If Change <> Range("A4:A50") Then NUMDate
ChangeRange
End Sub
In Modulo1
Public Change
Sub ChangeRange()
If Change = "" Then Change = 0
Change = Range("A4:A50")
End Sub |
di alfrimpa data: 04/08/2015 16:32:44
Ciao Fabio
Non so se ho capito bene ma prova con questa macro qui sotto da inserire nel modulo del foglio interessato.
Alfredo
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
Target.Offset(0,2).Value = Date
End If
End Sub
|
di ITFabio (utente non iscritto) data: 04/08/2015 16:52:39
Ciao Alfredo,
Grazie mille funziona ed è molto più semplice di quello che stavo facendo io, purtroppo io mi sono arrangiato con quello che ho trovato su internet :)
ti chiedo un paio di cose se sei così gentile da dedicarmi ancora 5 minuti:
Target, Range("A:A") con questo selezione la colonna A (ma perchè metti la negazione all'inizio?) e con questo Target.Offset(0,2) invece lasci la riga invariata e ti sposti di due colonne giusto? quindi se la colonna fosse la D dovrei mettere 0,3?
Ho provato è c'è un piccolo problema che se la cella è vuota lui mette la data e va bene ma lo fa anche se io modifico la cella mentre invece vorrei che non lo facesse cioè che una volta inserita non me la cambi più posso fare così quindi penso dovrei mettere un if annidato che veda se la cella di destinazione è vuota mette la data altrimenti no. Come faccio a dirglielo? Potrebbe andare come ho scritto?
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If target.offset (0,2) = "" then
Target.Offset(0,2).Value = Date
End If
End If
End Sub |
di alfrimpa data: 04/08/2015 17:02:04
Ciao Fabio
Ora sono da cell e non posso dilungarmi; lo farò sicuramente più tardi o domani.
Offset è lo scarto ed i parametri sono riga e colonna quindi se scrivo 0, 3 è la colonna D
Ma la macro modificata l'hai provata?
Per il resto ci risentiamo.
Alfredo
di ITFabio (utente non iscritto) data: 04/08/2015 17:06:38
Si tranquillo mi hai già aiutato un sacco, si l'ho provata ho ancora un piccolo problema perchè se cancello una cella della colonna A mi aggiorna la data ma ora vedo di cambiare la condizione e dovrebbe andare a posto.
Se hai voglia e tempo anche domani ovviamente di spiegarmi brevemente If Not Intersect(Target, Range("A:A")) Is Nothing Then questa riga mi fai un favore.
Grazie mille e a presto!!!!
Fabio
di alfrimpa data: 04/08/2015 18:03:29
Ciao Fabio
Il metodo Intersect verifica se c'è un'intersezione (ossia una o più celle in comune) tra due intervalli.
I due intervalli sono specificati dai due parametri del metodo cioè Target (che è la celle/e su cui si agisce) e Range (che è la zona da noi specificata.
Se Intersect restituisce Nothing vuol dire che questa intersezione non c'è; diversamente viene eseguito il codice successivo.
L'istruzione If Not Intersect(Target, range("a1:a10")) Is Nothing Then in italiano vuole dire
se il target ricade all'interno dell'intervallo specificato mi esegui il codice (due negazioni affermano).
Spero di essere stato chiaro.
Comunque per ulteriori approfondimenti dai uno sguardo a questo link
h t t p://ennius.altervista.org/vba/vba13.php
Alfredo
di Raffaele_53 data: 04/08/2015 18:06:13
Not serve a dire che se non è in colonna A = non intervenire
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If Target.Offset(0, 2).Value = "" Then
Target.Offset(0, 2).Value = Date 'Target.Offset(0, 3) per colonna D
End If
End If
End Sub |
di alfrimpa data: 04/08/2015 18:09:59
Ciao Raffaele
Io l'avevo interpretata così
Se il risultato restituito da Intersect non è nullo allora esegui il codice.
Non so se è corretto.
Alfredo
di Vecchio Frac data: 04/08/2015 18:20:48
Mi permetto, nel mio piccolo, di dare ragione ad alfrimpa per la parte della spiegazione tecnica ^_^
Raffaele ci offre una visione pragmatica di quello che fa il codice proposto.
di Raffaele_53 data: 04/08/2015 18:37:48
Non sò se "pragmatica" sia una brutta parola. Non credo...
Prova a togliere il NOT e vedi cosa succede?
Personalmente preferisco Now = data + orario
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If Target.Offset(0, 2).Value = "" Then
Target.Offset(0, 2).Value = Now 'Target.Offset(0, 3) per colonna D
End If
End If
Application.EnableEvents = True
End Sub |
di Raffaele_53 data: 04/08/2015 19:00:45
Qui nasce un problema "descritto da alfrimpa in area51"
L'utente che NON conosce queste "cose", fà dei copia/incolla.
Il Sub Worksheet_Change và in errore e non ripristina il Application.EnableEvents = True
di alfrimpa data: 04/08/2015 19:10:25
Ciao Raffaele
Ed inoltre ci sarebbe da gestire anche le cancellazioni di una o più celle con
If Target.Cells.Count > 1 Then Exit Sub e
If Target.Value = "" Then Exit Sub
Senza le quali il codice andrebbe in debug.
Perdonami la disabilitazione degli eventi è stata una mia dimenticanza.
Alfredo
di Raffaele_53 data: 04/08/2015 19:20:58
>>>Ed inoltre ci sarebbe da gestire anche le cancellazioni di una o più celle con
dal copia/incolla
Credo si possa in caso d'errore, chiudere il file "senza salvarlo.
Non credo sia valido però (dopo qualche ora di lavoro)?
di Vecchio Frac data: 04/08/2015 21:55:38
cit. "Non sò se "pragmatica" sia una brutta parola. Non credo... "
---> E certo che no: significa che è una soluzione "pratica".
Vuoi Approfondire?