Sheet change con codifica
Hai un problema con Excel? 
Sheet change con codifica
di Sbizzy data: 24/06/2015 16:35:28
Ciao a tutti,
ho uno sheet change che in base all'inserimento fatto in una cella, colora le 4 celle sopra. Il file viene aperto solo su un terminale ma ci lavorano 3 persone (per semplicità le chiamo A, B e C). Gli inserimenti possibili sono visibili nel file d'esempio da A5 a Q5. Siccome non ci sono vincoli per gli operatori stessi, può essere che l'operatore C scriva (volutamente o meno) "1A" facendo cosi ricadere la responsabilità sull'operatore A. Per evitare ciò, volevo fare in modo che ogni operatore, invece di inserire direttamente la scritta da visualizzare, mettesse un codice di 4 cifre che corrisponda a uno degli inserimenti previsti (banalmente, se mette AAA diventa 1A, se mette BBB diventa 2A). Ovviamente se l'inserimento non ha corrispondenze viene compilata la cella con la scritta "errore".
Ho fatto alcune prove, semplicemente facendo una serie di if a parte, ma spesso si bloccava l'esecuzione o finiva in loop perchè la rimodifica del target riavviava lo sheet change.
Qualcuno mi aiuta?
Se ci sono soluzioni alternative che non hanno a che fare con lo sheet change, vanno bene lo stesso.
Grazie, ciao.
Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
If myChg = "Off" Then Exit Sub
ActiveSheet.Unprotect
If (Target.Value Like "1*") = True Then
For a = 1 To 4
Target.Select
ActiveCell.Offset(-a, 0).Activate
Selection.Cells.Interior.Color = 5296274
Next
ElseIf (Target.Value Like "2*") = True Then
For a = 1 To 4
Target.Select
ActiveCell.Offset(-a, 0).Activate
Selection.Cells.Interior.Color = 65535
Next
ElseIf (Target.Value Like "ok1*") = True Then
For a = 1 To 4
Target.Select
ActiveCell.Offset(-a, 0).Activate
Selection.Cells.Interior.ColorIndex = 4
Next
ElseIf (Target.Value Like "ok2*") = True Then
For a = 1 To 4
Target.Select
ActiveCell.Offset(-a, 0).Activate
Selection.Cells.Interior.Color = 52479
Next
ElseIf (Target.Value Like "ok") = True Then
For a = 1 To 4
Target.Select
ActiveCell.Offset(-a, 0).Activate
Selection.Cells.Interior.Color = 12611584
Next
ElseIf Target.Value = "" Or Target.Value = 0 Then
For a = 1 To 4
Target.Select
ActiveCell.Offset(-a, 0).Activate
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Next
ElseIf (Target.Value Like "WARNING") = True Then
For a = 1 To 4
Target.Select
ActiveCell.Offset(-a, 0).Activate
Selection.Cells.Interior.Color = 16711833
Next
Else
For a = 1 To 4
Target.Select
ActiveCell.Offset(-a, 0).Activate
Selection.Cells.Interior.Color = 255
Next
End If
Target.Select
ActiveSheet.Protect
ActiveWorkbook.Save
End Sub |
di totygno71 data: 24/06/2015 17:59:50
Per quanto ne capisco io se vuoi evitare errori di inserimento potresti utilizzare una conavlida dati e per quanto riguarda la colorazione delle celle una formattazione condizionale...
Oppure ho capito male cosa vuoi ottenere?
di Sbizzy data: 25/06/2015 13:13:52
No la logica dei colori va bene cosi e non voglio usare la formattazione condizionale per una serie di ragioni.
Il mio problema non è che inseriscono dati non validi, ma il fatto che i 3 operatori devono inserire solo i dati a loro associati (ad esempio l'operatore A può inserire solo i valori 1A, 2A, OK1A e OK2A). Allo stato attuale, ma anche mettendo la convalida dati, l'operatore A può mettere 2B senza che nessuno se ne accorga. Io voglio evitare questo e per farlo avevo pensato di far inserire un codice che conosce solo l'operatore A che poi si tramutasse automaticamente in uno degli inserimenti possibili.
Per sintetizzare, io dico all'operatore A che per mettere 1A deve inserire il codice AAA, allora se scrive AAA nella cella A5, lo sheet change deve cambiare tale valore in 1A e colorare le celle sopra di verde. Se invece prova a mettere direttamente 1A, deve segnalare errore.
di totygno71 data: 25/06/2015 15:01:06
Prova il file Test_Toty
di Sbizzy data: 26/06/2015 15:51:52
Ciao, sembra che sia perfetto, lo provo oggi o lunedì e ti faccio sapere.
Grazie.
di Sbizzy data: 29/06/2015 11:25:24
Ok funziona alla grande!!!
Grazie ancora.
di totygno71 data: 29/06/2015 13:25:11
Vuoi Approfondire?