Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] Far partire una macro a condizione

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

[Excel] Far partire una macro a condizione

Postdi cencio70 » 05/06/06 17:34

Qualcuno di voi sa dirmi se è possibile con la formula "se", al verificarsi dell'evento, far partire una macro? :?:
cencio70
Utente Junior
 
Post: 54
Iscritto il: 05/06/06 16:40
Località: Arezzo

Sponsor
 

Postdi Alexsandra » 05/06/06 19:18

Si
- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale.

Win7 + Office 2003 Ita
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi cencio70 » 05/06/06 20:37

Ok...la risposta è quella che meritavo...però adesso mi puoi dire come faccio? Grazie
cencio70
Utente Junior
 
Post: 54
Iscritto il: 05/06/06 16:40
Località: Arezzo

Postdi Alexsandra » 05/06/06 22:02

Codice: Seleziona tutto
 =SE(A1<5000;A1*8%;SE(E(A1>=5000;A1<25001);A1*4%;SE(A1>=25000;A1*2,5%)))

inserendo un valore in A1 la formula ti porta il risultato in D1.
apri VBA e nel foglio che hai inserito la formula metti il seguente codice
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("d1").Value <> "" Then
MsgBox "Ciao avvio una macro di prova"
End If
End Sub
ovviamente cambiando i riferimenti nella formula e anche nel codice VB puoi fare quello che desideri

PS. la macro ti parte in sempre perchè ho messo la condizione (<> "") se invece tramite la formula metti un risultato tipo <= 100 solo in quel caso si avvia
- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale.

Win7 + Office 2003 Ita
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Re: [Excel] Far partire una macro a condizione

Postdi Anthony47 » 06/06/06 00:33

cencio70 ha scritto:Qualcuno di voi sa dirmi se è possibile con la formula "se", al verificarsi dell'evento, far partire una macro? :?:
Scrivi la tua macro, ... ma chiamala Function; es
Codice: Seleziona tutto
  Function Bello()
  . . .
  . . . .
  End Function
Poi nella tua cella scrivi
Codice: Seleziona tutto
 =SE(test;bello();"no bello")
Ovviamente inserisci il test che ti serve, che se e' vero attiva la macro (pardon, la "funzione") Bello.

Dimmi se ti aiuta; ciao.

*** I codici vanno racchiusi nei Tag [ ] usando il tasto code
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: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Far partire una macro a condizione

Postdi LucaXls » 28/06/06 05:39

Anthony47 ha scritto:
cencio70 ha scritto:Qualcuno di voi sa dirmi se è possibile con la formula "se", al verificarsi dell'evento, far partire una macro? :?:
Scrivi la tua macro, ... ma chiamala Function; es
Codice: Seleziona tutto
  Function Bello()
  . . .
  . . . .
  End Function
Poi nella tua cella scrivi
Codice: Seleziona tutto
 =SE(test;bello();"no bello")
Ovviamente inserisci il test che ti serve, che se e' vero attiva la macro (pardon, la "funzione") Bello.

Dimmi se ti aiuta; ciao.

Ciao... scusate l'intrusione ma sono interessatissimo al discorso, poichè ho l'esigenza di affrontare un roblema del tutto analogo.

Ho creato la funzione "Bello" (che colora di rosso tutta la colonna C) e poi ho digitato in A1 la formula che tu stesso hai suggerito: =SE(test;bello();"no bello")

Ma non sembra funzionare!!!
Non solo non mi viene lanciata la funzione, e quindi la colonna C non viene colorata, ma addirittura in A1 spunta il messaggio: #VALORE!
come se appunto dalla funzione ci si aspettasse un valore che però non c'è.
Sei sicuro, Anthony47, che il tuo metodo funzioni?

Ti ringrazio tanto per l'attenzione.
LucaXls
Utente Junior
 
Post: 33
Iscritto il: 28/06/06 05:29

Postdi Anthony47 » 28/06/06 08:31

Forse ho creato troppe aspettative.

Il fatto e' che una Function per definizione non puo' fare altro che elaborare dei dati e restituirli nella cella che contiene la funzione; non puo' cioe' fare operazioni tipo formattazione, o manipolazione di altre celle (salvo leggerene i dati se sono stati passati come dati da elaborare).
Ed e' inutile fare call di un' altra "macro" perche' la macro, quando invocata da una Function, ne eredita tutti i vincoli.

Se vuoi fare cose piu' complesse potresti, ad esempio, sfruttare l' evento Worksheet_Change o Worksheet_Calculate, che programmi affinche' se una certa cella contiene un certo valore fa le cose che ti servono, senno' subito exit.

Se serve aiuto, siamo qua; 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: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi LucaXls » 28/06/06 14:48

Ecco... ora è chiaro.
Ecco perchè non riuscivo a creare una funzione personalizzata che svolgesse il ruolo di una macro, semplicemente perchè non si poteva fare (peccato però... sarebbe stato bello...).

Ho provato a dilettarmi allora col Worksheet_Change, devo dire che sono abbastanza sorpreso perchè era da tempo che speravo di poter lanciare una macro al solo variare del valore di una cella... (mi avete aperto un mondo!) però nei miei tentativi sono ancora tantissimi i dubbi e le cose che non mi tornano:

1) Il codice del Worksheet_Change non va scritto dentro un modulo ma dentro la "cartella" Microsoft Excel oggetti... come mai e qual è la differenza?

2) Prima di sub Worksheet_Change va scritto per forza "private", e perchè?

3) Quale dev'essere l'argomento di Worksheet_Change?

4) Qual è la differenza tra il Worksheet_Change e il Worksheet_Calculate?

5) E se volessi fare tante di queste funzioni, che fanno partire tante diverse macro, come faccio? Il debug di VBA mi dice giustamente che non posso creare due funzioni con lo stesso nome, e se rinomino il Worksheet_Change in qualsiasi altro modo non mi funziona...

Spero di non essere troppo invadente... e vi ringrazio sempre per l'attenzione prestatami.
LucaXls
Utente Junior
 
Post: 33
Iscritto il: 28/06/06 05:29

Postdi Anthony47 » 28/06/06 16:18

Tante domande, risposte brevi.
Intanto dai una occhiata all' help di vba, voce "Utilizzo degli eventi con oggetti di Microsoft Excel".

Gli eventi di "worksheet" vanno scritti dentro il worksheet a cui si riferisce; significa che avrai sub che partono su condizioni di Foglio1, altre di Foglio2 etc.
Puoi solo avere una sub (per foglio) che gestisce quel tipo di evento.

Secondo me l' opzione private (opposto di oublic) e' implicita nelle sub di eventi; anche gli argomenti sono fissati dalla sintassi.

Change = cambiamenti non prodotti da formule; Calculate = quando si esegue il calculate; SelectionChange quando si cambia la cella selezionata. Quindi se digiti un valore in una cella, prima hai Change, poi Calculate, poi (tipicamente) SelectionChange; cioe' partono tanti eventi, quindi la prima istruzione che sia un Application.EnableEvents = False.

Per inizializzare una macro di evento, clicca sull' oggetto (es Foglio1), scegli sull' elenco in alto a sx "Worksheet", poi scegli sull' elenco in alto a sx l' evento che ti serve; poi aggiungi le tue istruzioni.

Se vuoi fare tante cose diverse con un unico tipo di evento, allora devi capire quali condizioni hanno fatto scattare l' evento e con If, Case o altro eseguire il codice che ti serve.

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: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Alexsandra » 28/06/06 16:28

Il codice del Worksheet_Change non va scritto dentro un modulo ma dentro la "cartella" Microsoft Excel oggetti... come mai e qual è la differenza?
perchè ogni riga di codice è riferita al foglio in cui lo metti e collegato all'evento Worksheet (praticamente fai doppio clik sul nome del foglio e scegli l'evento Worksheet in cui puoi trovare vari metodi Change,calculate,activate etcc
Prima di sub Worksheet_Change va scritto per forza "private", e perchè?
perchè è una sub che rimane privata,cioè all'interno del foglio in cui la metti e dovrebbe svolgere il suo compito solo in quel foglio
Quale dev'essere l'argomento di Worksheet_Change?
quello che vuoi o che ti serve per quel foglio può essere una macro oppure una function
Qual è la differenza tra il Worksheet_Change e il Worksheet_Calculate?
lo dice la parola gli eventi change (cambia) e calculate(calcola) se cambi o calcoli qualcosa nel foglio li puoi usare
5) E se volessi fare tante di queste funzioni, che fanno partire tante diverse macro, come faccio?
devi studiarti un bel libro o consultare la guida on line
e se rinomino il Worksheet_Change in qualsiasi altro modo non mi funziona
non puoi rinominare quelle chiamate
Spero di non essere troppo invadente...
non tanto, una buona guida ti aiuta di più ci sono tantissime cose oltre a quelle che hai citato
e vi ringrazio sempre per l'attenzione prestatami.
Prego :lol: :lol:
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi LucaXls » 28/06/06 16:38

Grazie ad entrambi, siete celeri e precisi.

Sì è chiaro che leggermi una guida è la cosa più idonea.... solo che mi aspettavo di creare tutto operando più sul foglio di calcolo, che sul VBA.
Evidentemente mi sbagliavo!
LucaXls
Utente Junior
 
Post: 33
Iscritto il: 28/06/06 05:29

Postdi Alexsandra » 28/06/06 17:08

C'è il pro e il contro.
Usare tante formule appesantiscono il foglio (in MB) a mè risulta più pratico sparare la formula dal VBA e incollare il solo valore,se in più aggiungi anche molte righe di dati è molto più conveniente applicare il VBA che lasciare le formule nel foglio.

Comunque questa è una mia personale opinione.

Ciao
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi LucaXls » 28/06/06 18:31

No no... hai perfettamente ragione!

Il problema sta solo nel saper programmare in visual basic o comunque avere una certa esperienza col VBA, entrambe cose che a me al momento mancano...
io ho approfondito in questi anni più che altro le mie conoscenze NEL foglio elettronico... per questo ora mi trovo "spiazzato", ma mi rendo conto che quel che dici è più che giusto, il foglio meno lo si appesantisce... meglio è...

Vabbè vorrà dire che da oggi inizierò pian pianino a farmi una cultura del VBA...
LucaXls
Utente Junior
 
Post: 33
Iscritto il: 28/06/06 05:29

Postdi Alexsandra » 28/06/06 19:17

Io invece il contrario ho tralasciato il foglio a favore di vba e devo dire che non cambierei.

Ma anche questo è il mio personale punto di vista,diciamo che vanno bene tutti e due,dipende a volte dal contesto in cui li usi. Fai un cerca su google "guida vba" o "manuale vba" e troverai tantissime guide e tutorial
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi Anthony47 » 29/06/06 00:30

LucaXls ha scritto:Vabbè vorrà dire che da oggi inizierò pian pianino a farmi una cultura del VBA...


Un po' di cultura del Vba non guasta, ma sappi che anche io preferisco risolvere i problemi NEL foglio elettronico: in genere lo trovo piu' immediato, piu' flessibile e anche piu' manutenibile. Certe cose poi le potrai fare solo col Vba, ma anche qui sappi che il 50% del codice delle mie macro nasce da "registra nuova macro".

E' anche importante avere delle esigenze sempre impegnative, che ti costringono a cercare sempre nuove vie.

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: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Far partire una macro a condizione":


Chi c’è in linea

Visitano il forum: rogermo e 12 ospiti