| Attivare una macro di Linda
84 |
E' possibile lanciare una macro in modo automatico
quando il valore in una cella cambia ? grazie . questo
sito e' una bomba,complimenti. |
|
| Lancio di macro di Big
ronnie |
| Ciao linda,tu vuoi che la macro parta ad ogni
cambiamento di una qualsiasi cella o ad ogni cambiamento di una
cella ben definita(cioè ogni volta che cambia per es. la cella
"a1"? |
|
| Esattamente di Linda
84 |
Esattamente quando una cella esemp a1 cambia o
raggiunge un certo valore naturalmente mentre cio non accade
si deve poter continuare a lavovare sul foglio. grazie big
ronnie. |
|
| di Big ronnie |
Ciao linda,ti invio tre piccole routine che
dovrebbero fare al caso tuo,provale e poi fammi
sapere.
Inserisci questa macro nell'editor vba del foglio dove è la cella che deve cambiare
Private Sub Worksheet_Change(ByVal Target As Range)
'Ad ogni cambiamento di range("a1") viene eseguita la macro COLORE
Set Target = Range("a1")
If Target <> Cambio Then Colore
Set Target = Nothing
End Sub
inserisci questa nell'editor vba in Thisworkbook:
Sub Workbook_Open()
'ogni volta che si apre il file questa macro assegna il valore di range("a1") alla variabile Cambio
CambiamentoCella
End Sub
e quest'ultima in modulo1:
Sub CambiamentoCella()
If Cambio = "" Then Cambio = 0
Cambio = Range("a1")
End Sub
Sub Colore()
Range("b1").Interior.ColorIndex = 3
End Sub
Come esempio ad ogni cambiamento della cella "A1" faccio partire la macro COLORE. | |
|
| Correzione codice di Big
ronnie |
Scusami linda ho sbagliato codice.usa questo nuovo
codice.
nell'editor del foglio:
Sub Worksheet_Change(ByVal Target As Range)
If Cambio <> Range("a1") Then Colore
CambiamentoCella
End Sub
In Thisworkbook:
Sub Workbook_Open()
CambiamentoCella
End Sub
Nel Modulo1:
Public Cambio
Sub CambiamentoCella()
If Cambio = "" Then Cambio = 0
Cambio = Range("a1")
End Sub
Sub Colore()
Range("b1").Interior.ColorIndex = 3
End Sub
| |
|
| Booooom!!!!!! di
Linda84 |
Perfetta big ronnie grazie!!! la tua risposta
mi apre un mondo da scoprire. |
|
| Buon ferragosto a a big ronnie e a
tutti di Linda 84 |
Il codice che mi a postato big ronnie funzionano
benissimo per lanciare una sub da una condizione legata ad una
cella,e dopo averci lavorato e studiato non ho trovato il metodo per
lanciarne un altra legandola alla codizione di un altra cella.
in questo esemoio se il valore della clla f9 aumenta cancello il
contenuto di q9 come posso fare per cancellare il contenuto
di q10 se il valore della cella f10 aumenta?
Sub Worksheet_Change(ByVal Target As Range)
a=1
If Cambio > Range("a1") Then Colore
CambiamentoCella
End Sub
Sub Workbook_Open()
CambiamentoCella
End Sub
Public Cambio
Sub CambiamentoCella()
If Cambio = "" Then Cambio = 0
Cambio = Range("f9")
End Sub
Sub Colore()
Range("q9").Select
Selection.ClearContents
End Sub
| |
|
| Lampeggio celle di Big
ronnie |
Ciao linda, ti invio del codice sperando faccia al
caso tuo,eventualmente descrivi il tuo problema nella sua totalità
così eviteremo di compilare codice che poi non serve.nel codice c'è
un ampia descrizione di ciò che fanno le macro.ciao
nel Foglio1
Sub Worksheet_Change(ByVal Target As Range)
If ContenutoCella = "" Then ContenutoCella = 0
'Se il contenuto della cella "F" (dalla Numero 1 a 20 vedi ciclo FOR nella Routine sottostante) CAMBIA _
allora questa chiama l'altra macro chiamata COLORE e assegna il nuovo valore alla variabile ContenutoCella. _
Io ho selezionato le prime venti Celle di "F",ma questo valore lo devi adattare tu alle tue esigenze.
If ContenutoCella <> Range(Cella) Then
Colore 'Macro Modulo 1
ContenutoCella = Range(Cella) 'Nuovo Assegnamento
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set a = Application.ActiveCell 'Variabile Oggetto Cella Attiva
For I = 1 To 20
'Se la cella selezionata è tra le prime 20 della colonna "F" allora assegno il contenuto della cella _
attiva alla variabile globale "ContenutoCella" e il riferimento alla variabile globale "Cella".Infine _
assegno il Numero Di riga ( "I" sempre della cella attiva) alla variabile globale "NumeroRiga" che _
mi servirà nella macro Colore.Le variabili globali sono dichiarate nel MODULO 1.
If a.Address(rowabsolute:=False, columnabsolute:=False) = "F" & CStr(I) Then
ContenutoCella = Range("F" & I) 'CONTENUTO
Cella = a.Address(rowabsolute:=False, columnabsolute:=False) 'RIFERIMENTO(esempio: F18)
NumeroRiga = I 'NUMERO DI RIGA
End If
Next I
End Sub
in thisworkbook
Sub Workbook_Open()
Cella = "A1" ' Assegno un riferimento qualsiasi alla Variabile Cella per evitare un errore.
End Sub
nel modulo 1
'Variabili Globali
Public ContenutoCella
Public Cella As String
Public NumeroRiga
Sub Colore()
Worksheets(1).Range("Q" & NumeroRiga).Clear
End Sub
| |
|
| di Linda84 |
Solo ieri sera ho potuto leggere la tua post ho
studito il tuo codice che funziona perfettamente e grazie alle
tue spiegazioni oggi ne so piu' di ieri. questo codice pero'
a differenza del primo prevede che la cella soggetta a camdiamento
sia selezionata mentrenel mio caso il valore che cambia e'
inserito da un altra applicazione presumo in c++che li riceve
via web. comunque presumo che mi sara' uile in determinate
condizioni. nel frattempo ho lavorato sul tuo primo codice che
ho adattato semplicemente ripetendo per n volte come ti posto .
poi visto ce funzionava anche troppo bene in autoatico, mi e'
venuta l'esigenza di insetire un controllo che attiv0 con un
pulsante manuale e funziona perfettamente. poi (l'appetito
vien mangiando)ho inserito un codice ce dopo aver fatto il suo
lavoro si rimettesse nulla condizione di blocco e aspetta lo
sblocco manuale. anche questa fonziona ma per qualche secando lo
schermo balla e qualche volta si blocca lo stack.
il
controllo lo effettuo tramite il valore in due celle aa5 ab5 ab5
fissa cotiene 2 aa5 se contiene 2 blocca se 1 sblocca.
che
caos ho combinato?grazie ancora big ronnie.
Sub Worksheet_Change(ByVal Target As Range)
If Cambio5 < Range("f5") Then banca5
CambiamentoCella5
If Cambio6 < Range("f6") Then banca6
CambiamentoCella6
Sub Workbook_Open()
CambiamentoCella5
CambiamentoCella6
Public Cambio5
Sub CambiamentoCella5()
If Cambio5 = "" Then Cambio5 = 0
Cambio5 = Range("f5")
End Sub
Sub banca5()
a = Range("aa5").Value
B = Range("ab5").Value
If a = B Then
Exit Sub
Else | |
|
| Aaaaa di Linda84 |
Scusa
Public Cambio5
Sub CambiamentoCella5()
If Cambio5 = "" Then Cambio5 = 0
Cambio5 = Range("f5")
End Sub
Sub banca5()
a = Range("aa5").Value
B = Range("ab5").Value
If a = B Then
Exit Sub
Else
Range("Q5").Select
Selection.ClearContents
End If
Range("Aa5").Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = "2"
Range("Q5").Select
With Selection.Interior
.ColorIndex = 34
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
Exit Sub
| |
|
| di Big ronnie |
Ciao linda,il problema sta nel richiamare la cella
"q5" dopo la fine del ciclo if.questo genera dinuovo l'evento
change.ti mando il codice con delle modifiche vedi se fà per
te.comunque c'è un post interessante per te di chric "esecuzione
automatica macro" del 30-08-06, dovrebbe semplificare ciò che stai
facendo.
Nel modulo1:
Public Cambio5
Public cambio6
Sub CambiamentoCella5()
If Cambio5 = "" Then Cambio5 = 0
Cambio5 = Range("f5")
End Sub
Sub CambiamentoCella6()
If cambio6 = "" Then cambio6 = 0
cambio6 = Range("f6")
End Sub
Sub banca5()
a = Range("aa5").Value
B = Range("ab5").Value
If a = B Then
Exit Sub
Else
Range("Q5").Select
Selection.ClearContents
With Selection.Interior
.ColorIndex = 34
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
Range("Aa5") = 2
End If
End Sub
Sub banca6()
a = Range("aa6").Value
B = Range("ab6").Value
If a = B Then
Exit Sub
Else
Range("Q6").Select
Selection.ClearContents
With Selection.Interior
.ColorIndex = 34
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
Range("Aa6") = 2
End If
End Sub
| |