Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

eseguire una macro all'interno di una macro.

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

eseguire una macro all'interno di una macro.

Postdi scacco al re » 16/11/11 12:58

mi spiego meglio:
nella colonna A del foglio che ho chiamato valori ho una serie di date consecutive giorno dopo giorno
ho bisogno di una macro cerchi la data odierna (adesso()) nella colonna A (del foglio valori)
se la trova mi riestituisce in messaggio "data odierna già inseita"
se non la trova mi deve eseguire una macro (già esistente e funzionante).
Grazie
scacco al re
scacco al re
Utente Senior
 
Post: 498
Iscritto il: 10/05/02 19:18
Località: Sestri Levante

Sponsor
 

Re: eseguire una macro all'interno di una macro.

Postdi Flash30005 » 16/11/11 18:44

Questa macro fa quanto richiesto e inoltre se trova la data nel messaggio indica il numero riga e alla fine seleziona la cella contenente la data odierna
altrimenti chiama la tua macro (ho messo un messaggio che puoi togliere o commentare)

Codice: Seleziona tutto
Sub Cercadata()
UR = Worksheets("Valori").Range("A" & Rows.Count).End(xlUp).Row
DataO = DateSerial(Mid(Now(), 7, 4), Mid(Now(), 4, 2), Mid(Now(), 1, 2))
Trovata = 0
For RR = 2 To UR
DataA = Worksheets("Valori").Range("A" & RR).Value
DataF = DateSerial(Mid(DataA, 7, 4), Mid(DataA, 4, 2), Mid(DataA, 1, 2))
If DataF = DataO Then
Riga = RR
Trovata = 1
End If
Next RR
If Trovata = 1 Then
MsgBox "Data odierna già inserita (alla riga " & Riga & ")"
Worksheets("Valori").Select
Range("A" & Riga).Select
Else
MsgBox "Data odierna non tovata"
'Call TuaMacro
End If
End Sub


ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: eseguire una macro all'interno di una macro.

Postdi Anthony47 » 17/11/11 00:12

Se le date sono "consecutive giorno dopo giorno" allora l' unico posto dove potrebbe trovarsi la data odierna e' in fondo all' elenco; questo potrebbe consentire una piccola semplificazione della macro:
Codice: Seleziona tutto
Sub testoggi()
If Int(Now) = Worksheets("Valori").Range("A" & Rows.Count).End(xlUp).Value Then
    MsgBox ("Data odierna gia' inserita")
    Exit Sub
Else: Call macro2    'la tua macro
End If
End Sub


Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: eseguire una macro all'interno di una macro.

Postdi scacco al re » 17/11/11 06:02

Grazie, come sempre siete gentilissimi.
Oggiprovo e poi vi faccio sapere i risultati.
scacco al re
scacco al re
Utente Senior
 
Post: 498
Iscritto il: 10/05/02 19:18
Località: Sestri Levante

Re: eseguire una macro all'interno di una macro.

Postdi scacco al re » 17/11/11 06:42

ho usato la macro "semplificata" e l'ho modificata per farla partire in automatico all'apertura del file.
Codice: Seleziona tutto
Sub Auto_open()
If Int(Now) = Worksheets("Valori").Range("A" & Rows.Count).End(xlUp).Value Then
    MsgBox ("Data odierna gia' inserita")
    Exit Sub
Else: Call macro2    'la tua macro
End If
End Sub


bene finchè io utilizzo Il file e di conseguenza la macro giorno dopo giorno, perchè nella macro 2 tra i tanti comandi c'è un comando che mi incrementa la colonna A di un giorno per volta.
ma se uso il file (e la macro) dopo tre giorni o una settimana o un mese , avrei bisogno che ci fosse un "loop"
Non so se si potrebbe utilizzare l'struzione DO WHILE...LOOP oppure qualcos'altro.
logicamente valgono le condizioni precedenti, il loop deve "girare" eseguendo la macro2 e arrestarsi quando trova la data odierna
scacco al re
scacco al re
Utente Senior
 
Post: 498
Iscritto il: 10/05/02 19:18
Località: Sestri Levante

Re: eseguire una macro all'interno di una macro.

Postdi Flash30005 » 17/11/11 07:40

Mi sembra aver capito che vorresti aggiungere ad ogni riga tutti i giorni mancanti dall'ultima data registrata alla data odierna (?)
se così, la macro2 oltre a contenere il tuo codice dovrebbe contenere una routine di questo tipo
Codice: Seleziona tutto
Sub Macro2()

UR = Worksheets("Valori").Range("A" & Rows.Count).End(xlUp).Row
DataA = Worksheets("Valori").Range("A" & UR).Value
For ND = DataA + 1 To Int(Now)
UR = UR + 1
Worksheets("Valori").Range("A" & UR).Value = ND
Next ND
End Sub


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: eseguire una macro all'interno di una macro.

Postdi scacco al re » 17/11/11 09:30

si potrebbe lasciare la macro2 così com'è e fare la routine sulla macro principale?
nella mia testa facevo questo elementare ragionamento: ripetere la macro2 tante volte finchè la data inserita (con la macro2) coincide con quella odierna, a questo punto finire la macro principale con il messaggio "data odierna già inserita".
Ciao e Grazie
scacco al re
scacco al re
Utente Senior
 
Post: 498
Iscritto il: 10/05/02 19:18
Località: Sestri Levante

Re: eseguire una macro all'interno di una macro.

Postdi Flash30005 » 17/11/11 09:48

Certo che si può!!!
E' sufficiente riportare il codice che avevo inserito in Macro2 dopo Else

Codice: Seleziona tutto
Sub Auto_open()
If Int(Now) = Worksheets("Valori").Range("A" & Rows.Count).End(xlUp).Value Then
    MsgBox ("Data odierna gia' inserita")
    Exit Sub
Else

UR = Worksheets("Valori").Range("A" & Rows.Count).End(xlUp).Row
DataA = Worksheets("Valori").Range("A" & UR).Value
For ND = DataA + 1 To Int(Now)
UR = UR + 1
Worksheets("Valori").Range("A" & UR).Value = ND
Next ND

Call macro2    'la tua macro
End If
End Sub


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: eseguire una macro all'interno di una macro.

Postdi scacco al re » 18/11/11 07:13

Codice: Seleziona tutto
Sub Cercadata()
UR = Worksheets("Valori").Range("A" & Rows.Count).End(xlUp).Row
DataO = DateSerial(Mid(Now(), 7, 4), Mid(Now(), 4, 2), Mid(Now(), 1, 2))
Trovata = 0
For RR = 2 To UR
DataA = Worksheets("Valori").Range("A" & RR).Value
DataF = DateSerial(Mid(DataA, 7, 4), Mid(DataA, 4, 2), Mid(DataA, 1, 2))
If DataF = DataO Then
Riga = RR
Trovata = 1
End If
Next RR
If Trovata = 1 Then
MsgBox "Data odierna già inserita (alla riga " & Riga & ")"
Worksheets("Valori").Select
Range("A" & Riga).Select
Else
MsgBox "Data odierna non tovata"
'Call TuaMacro
End If
End Sub


questa macro che mi da un errore e mi evidenzia di giallo DataF
____________________________
Codice: Seleziona tutto
Sub testoggi()
If Int(Now) = Worksheets("Valori").Range("A" & Rows.Count).End(xlUp).Value Then
    MsgBox ("Data odierna gia' inserita")
    Exit Sub
Else: Call macro2    'la tua macro
End If
End Sub


questa funziona alla grande
___________________________

Codice: Seleziona tutto
Sub Auto_open()
If Int(Now) = Worksheets("Valori").Range("A" & Rows.Count).End(xlUp).Value Then
    MsgBox ("Data odierna gia' inserita")
    Exit Sub
Else

UR = Worksheets("Valori").Range("A" & Rows.Count).End(xlUp).Row
DataA = Worksheets("Valori").Range("A" & UR).Value
For ND = DataA + 1 To Int(Now)
UR = UR + 1
Worksheets("Valori").Range("A" & UR).Value = ND
Next ND

Call macro2    'la tua macro
End If
End Sub


questa non da nessun errore, ma ignora il controllo della data e non mi rimanda il messaggio data odierna già inseria.
ovviamente l'ho provata senza Auto_open() perchè se no si innescava un loop infinito.
scacco al re
scacco al re
Utente Senior
 
Post: 498
Iscritto il: 10/05/02 19:18
Località: Sestri Levante

Re: eseguire una macro all'interno di una macro.

Postdi Flash30005 » 18/11/11 10:52

La macro (questa)
Codice: Seleziona tutto
Sub Auto_open()
If Int(Now) = Worksheets("Valori").Range("A" & Rows.Count).End(xlUp).Value Then
    MsgBox ("Data odierna gia' inserita")
    Exit Sub
Else
UR = Worksheets("Valori").Range("A" & Rows.Count).End(xlUp).Row
DataA = Worksheets("Valori").Range("A" & UR).Value
For ND = DataA + 1 To Int(Now)
UR = UR + 1
Worksheets("Valori").Range("A" & UR).Value = ND
Next ND
End If
End Sub

Funziona perfettamente!

Se ti dà errore significa che la data nella colonna A non è una data oppure ci sono degli spazi che la rendono testo
Controlla bene

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: eseguire una macro all'interno di una macro.

Postdi scacco al re » 19/11/11 23:10

Funziona tutto egregiamente, l'errore era in una altra mia macro che veniva richiamata.
Grazie
scacco al re
scacco al re
Utente Senior
 
Post: 498
Iscritto il: 10/05/02 19:18
Località: Sestri Levante


Torna a Applicazioni Office Windows


Topic correlati a "eseguire una macro all'interno di una macro.":


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti