|
Rank: Member
Iscritto dal : 5/23/2005 Posts: 4
|
buongiorno. qualcuno può spiegarmi come si fa ad attivare una macro in automatico solo quando è vera una determinata condizione, per es. una data? grazie anticipate. Ivan
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve bisogna che sfrutti l'evento change del foglio in modo che al verificarsi della condizione venga eseguita la macro es. Se la data della cella A1 è uguale a 30/03/07 si deve eseguire la macro "Miamacro" dovrai scrivere questo: Private Sub Worksheet_Change(ByVal Target As Range) miadata = #3/30/2007# If Range("a1").Value = miadata Then call Miamacro End If End Sub La macro va inserita nel modulo del foglio. Click dx sulla linguetta del foglio e scegliere "Visualizza codice" saluti Andrea
|
|
Rank: Member
Iscritto dal : 5/23/2005 Posts: 4
|
Probabilmente non mi sono spiegato bene o, forse, il problema è un altro. Io vorrei che all'apertura del file, in automatico, dopo aver confrontato le date della colonna A, una macro mi facesse un copia/incolla speciale (valori) nelle file in cui le date sono antecedenti a quella odierna. Saluti, Ivan
|
|
Rank: Member
Iscritto dal : 5/23/2005 Posts: 4
|
Probabilmente non mi sono spiegato bene o, forse, il problema è un altro. Io vorrei che all'apertura del file, in automatico, dopo aver confrontato le date della colonna A, una macro mi facesse un copia/incolla speciale (valori) nelle file in cui le date sono antecedenti a quella odierna. Saluti, Ivan
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve spiegata così la cosa è un po diversa. devi sfruttare l'evento open del file ed eseguire una macro che controlla le date. prova così: Private Sub Workbook_Open() oggi = CDate(Format(Now, "dd/mm/yy")) Sheets("foglio1").Select Set area = Range("a1", Range("a1").End(xlDown)) For Each cl In area If cl.Value <= oggi Then '------- 'qui metti la tua macro per copiare/incollare '--------------- End If Next End Sub saluti Andrea
|
|
Rank: Member
Iscritto dal : 5/23/2005 Posts: 4
|
Andrea, come sempre sei gentilissimo ma, per quanti tentativi abbia fatto, non succede niente, per attivare la macro devo dargli io il comando, non riesco a capire dove sbaglio. Grazie mille comunque. Ivan
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve prova a postare il codice della tua macro vediamo dove sta il problema. saluti Andrea
|
|
Rank: Member
Iscritto dal : 5/23/2005 Posts: 4
|
Ciao. Ecco quà il codice con anche la mia macro inserita dove mi hai indicato tu.
Private Sub Workbook_Open() oggi = CDate(Format(Now, "dd/mm/yy")) Sheets("foglio1").Select Set area = Range("a1", Range("a1").End(xlDown)) For Each cl In area If cl.Value <= oggi Then Range("B3:B8").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A3").Select End Sub End If Next End Sub
Come vedi è un semplicissimo copia/incolla speciale (valori) che dovrebbe entrare in azione all'apertura del file qualora la data in A1 sia uguale o inferiore alla data odierna. Cosa sbaglio?
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve forse sbagli il posto dove scrivere la macro. La macro va copiata nell'area del codice di ThisWorkbook dell'editor di Vba e non in un modulo. Aprendo l'editor di Vba Alt+F11 nella finestra a destra nell'elenco dei componenti di VbaProject(nome del tuo file) trovi la voce ThisWorkbook doppio clic su di esso e incolla la macro nella finestra di destra che si aprirà vuota. La macro è questa lasciando inalterata la parte del tuo codice (che copia i soli valori di un range su se stesso) Private Sub Workbook_Open() oggi = CDate(Format(Now, "dd/mm/yy")) Sheets("foglio1").Select Set area = Range("a1", Range("a1").End(xlDown)) For Each cl In area If cl.Value <= oggi Then Range("B3:B8").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A3").Select End If Next End Sub La cosa che non è chiara è che se trova più record rispondenti alla condizione If esegue la stessa operazione sullo stesso range. Tuttavia non sapendo cosa esattamente devi ottenere la prendo per buona. saluti Andrea
|
|
Rank: Member
Iscritto dal : 5/23/2005 Posts: 4
|
Andrea sei grande. Tutto risolto. Si, è vero, l'azione si ripete di continuo ma a questo penso di rimediare da solo (spero). Grazie ancora e... alla prossima!
|
|
Guest |