Annullare contenuto celle
Hai un problema con Excel? 
Annullare contenuto celle
di mandoz (utente non iscritto) data: 12/02/2013 22:25:53
ciao a tutti,
espongo il mio problema. ho cercato di adattare un codice funzionante ... ora non funziona più.
la mia necessità è la seguente. per i fogli 1 2 fino a 12 prendendo in esame le celle F10:F40
se la cella F10=AE9 (vuota) il codice dovrebbe annullare il contenuto di E10 F10 G10... AD10
noterete che i valori delle celle possono essere inseriti attraverso una formula o da elenco convalida dati.
GRAZIE
'proposta da xxx
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("F10:F40")) Is Nothing Then Exit Sub
riga = Target.Row
'If Cells(riga, 1) <> "" Then
Range(Cells(riga, 5), Cells(riga, 25)).ClearContents
'End If
End Sub |
di mandoz (utente non iscritto) data: 12/02/2013 22:37:38
scusate per il formato dell'allegato non consentito.
di Mabolsie (utente non iscritto) data: 12/02/2013 22:39:50
Ciao mandoz, perchè hai messo gli apici nell' IF ed END if ? Sono forse commenti o fatto parte del codice eseguibile ? Se è codice eseguibile levali e prova.
Ciao Max
di mandoz (utente non iscritto) data: 12/02/2013 23:06:59
ciao max
gli apicetti fanno un ulteriore controllo di cui, in questo caso, non ho bisogno
di Mabolsie (utente non iscritto) data: 12/02/2013 23:23:25
Allora metti l'apicetto anche alla riga in mezzo ad if ... end if altrimenti il programma ti esegue la riga Range che non ha più il controllo di If...End if e ti va a cancellare due celle che forse non vorresti siano cancellate.
P.S sto guardando il file allegato ma non capisco cosa tu voglia fare ( forse è l'orario, è meglio che vada a letto!!!)
Ciao Max
di Vecchio Frac data: 13/02/2013 21:17:46
Il concetto è:
"appena modifico una cella in F10:F40, voglio che le colonne da E a AD della stessa riga della cella modificata vengano cancellate".
Devi identificare il range preciso in cui viene modificata un cella, e svuotare le celle di quella riga.
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("F10:F40")) Is Nothing Then Exit Sub
Application.EnableEvents = False
if target = "" then
Range(Cells(target.row, "E"), Cells(target.row, "AD")).ClearContents
end if
Application.EnableEvents = True
End Sub |
di mandoz (utente non iscritto) data: 13/02/2013 21:31:03
grandissimo vecchio frac.
il tuo codice è quello che cercavo.... mancherebbe solo una cosa
nel cancellare il contenuto delle celle come già fa, il tuo codice dovrebbe salvaguardare le formule in esse contenute
di Vecchio Frac data: 14/02/2013 12:04:21
Allora non ho capito l'obiettivo.
Se inserisci un dato in F10, F11, F12, ... le celle nella stessa riga da B in avanti si compilano correttamente (ci sono delle formule).
Se poi cancelli con Canc quel dato, le celle della stessa riga si cancellano e rimanogno le formule.
Non ti serve codice VBA.
di mandoz (utente non iscritto) data: 14/02/2013 20:54:57
brevemente..
dopo aver impostato un valore in F10, le formule hanno compilato altre celle. ok .
ho reso vuota la cella F10, il codice ha annullato come concordato. ok .
ho avuto bisogno di impostare nuovamente un valore in F10 "diverso da vuoto" , mi sono accorto che
le celle G10 H10... non si aggiornano più perchè senza formule.
di Vecchio Frac data: 14/02/2013 21:24:21
Esaminando il file che hai allegato, vedo che in ognuno dei fogli da "1" a "12" (i mesi, per capirci) c'è quel codice che effettua il .ClearContents; quindi devi fare un passo indietro e cancellare quel codice.
Di passaggio ti informo che non è necessario trascrivere eventuale codice che intercetta la modifica di un range per ogni foglio coinvolto, puoi rispramirare codice duplicato e ridondante scrivendolo una volta sola nell'evento Worrkbook_SheetChange di ThisWorkbook (che nella tua versione di Excel si chiama Questa_cartella_di_lavoro). Ma questo è eventualmente un passo successivo.
In pratica ti basta riportare le formule dai fogli successivi al primo foglio per "tornare indietro".
Al resto pensano le formule.
di mandoz (utente non iscritto) data: 14/02/2013 22:18:47
farò un foglio "0" come campione.
grazie
Vuoi Approfondire?