Aiutamici Forum
Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

excell - macro + se Opzioni
ivan04
Inviato: Thursday, March 22, 2007 11:15:55 AM
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
Sponsor
Inviato: Thursday, March 22, 2007 11:15:55 AM

 
a10n11
Inviato: Friday, March 23, 2007 11:26:25 AM

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

ivan04
Inviato: Friday, March 23, 2007 1:49:51 PM
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
ivan04
Inviato: Friday, March 23, 2007 1:50:12 PM
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
a10n11
Inviato: Friday, March 23, 2007 4:55:37 PM

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

ivan04
Inviato: Saturday, March 24, 2007 11:30:57 AM
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
a10n11
Inviato: Sunday, March 25, 2007 11:18:10 AM

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

ivan04
Inviato: Sunday, March 25, 2007 11:57:00 AM
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?
a10n11
Inviato: Monday, March 26, 2007 9:54:52 AM

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


ivan04
Inviato: Monday, March 26, 2007 10:10:41 AM
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!
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.