| | Post: 65 | Registrato il: 08/12/2013
| Utente Junior | Excel 2010 | | OFFLINE | |
|
22/04/2018 13:07 | |
Ciao a tutti.
Cerco un codice VBA che blocca l'inserimento di valori in alcune celle vuote di una tabella protetta (M8:P8 e seguenti) se le celle B8 e seguenti contengono la lettera "F". |
|
| | Post: 3.717 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | ONLINE |
|
22/04/2018 16:19 | |
Ciao Franco28.2013.
Le macro non si cercano nè si trovano; si scrivono.
Tu dici "se le celle B8 e seguenti" ma seguenti orizzontalmente o vericalmente?
Cerca di essere più preciso con un file di esempio con i dati e spiega su questo quello che vuoi fare. [Modificato da alfrimpa 22/04/2018 16:20]
Alfredo |
| | Post: 65 | Registrato il: 08/12/2013
| Utente Junior | Excel 2010 | | OFFLINE | |
|
22/04/2018 23:45 | |
Ciao, Alfredo.
Allego il file richiesto. Le celle di una data area vengono bloccate per impedire l'inserimento errato di dati non pertinenti.
Grazie. [Modificato da franco28.2013 22/04/2018 23:56] |
| | Post: 3.718 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | ONLINE |
|
23/04/2018 13:35 | |
Prova con questa macro da inserire nel modulo del foglio interessato.
vb Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B8:B1000")) Is Nothing Then
If Target.Rows.Count > 1 Then Exit Sub
ActiveSheet.Unprotect Password:="1234"
If Target.Value = "F" Then
Range(Cells(Target.Row, "M"), Cells(Target.Row, "P")).Locked = True
End If
Else
Range(Cells(Target.Row, "M"), Cells(Target.Row, "P")).Locked = False
ActiveSheet.Protect Password:="1234"
End If
End Sub
Alfredo |
| | Post: 66 | Registrato il: 08/12/2013
| Utente Junior | Excel 2010 | | OFFLINE | |
|
23/04/2018 13:54 | |
Ciao, Alfredo.
Ho inserito la macro e ho salvato il file come macro, ma non funziona.
Al momento in cui cerco di inserire i dati in M8 (che dovrebbe essere bloccata) appare una finestra che mi avvisa che c'è un errore di run-time 1004 (impossibile impostare la proprietà locked per la classe Range). Lo stesso accade quando cerco di inserire i dati in una nuova riga (14). [Modificato da franco28.2013 23/04/2018 15:08] |
| | Post: 3.719 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | ONLINE |
|
23/04/2018 14:08 | |
Dove hai inserito la macro?
L'hai messa nel modulo del foglio e non in uno standard? Conosci la differenza tra i due?
Prima di postarlo il codice l'ho testato e funzionava perfettamente.
Allega il file non funzionante. [Modificato da alfrimpa 23/04/2018 14:09]
Alfredo |
| | Post: 67 | Registrato il: 08/12/2013
| Utente Junior | Excel 2010 | | OFFLINE | |
|
23/04/2018 15:06 | |
Allego file con macro da te proposta.
Prima l'avevo inserita nel foglio. Ora nel modulo ma non funziona.
Non sono pratico di macro.
Caio.
Franco |
| | Post: 1.848 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
24/04/2018 10:31 | |
ciao
da quanto ho capito non vuoi che si scriva nelle celle da M8:P8 in giù, se la corrispondente cella di colonna B contiene la lettera F
Nel vb del foglio:
Private Sub Worksheet_Change(ByVal Target As Range)
ur = Range("A" & Rows.Count).End(xlUp).Row
If Not Intersect(Target, Range("M8:P" & ur)) Is Nothing Then
Application.EnableEvents = False
If Cells(Target.Row, 2) = "F" Then
MsgBox "Non puoi scrivere in queste celle"
Cells(Target.Row, Target.Column) = ""
End If
End If
Application.EnableEvents = True
End Sub
Diverso sarebbe se oltre questo vuoi che nel momento in cui inserisci una "F" in col. B si azzerassero i dati delle corrispondenti celle Mx:Px, allora la macro diventerebbe:
Private Sub Worksheet_Change(ByVal Target As Range)
ur = Range("A" & Rows.Count).End(xlUp).Row
Application.EnableEvents = False
If Not Intersect(Target, Range("M8:P" & ur)) Is Nothing Then
If Cells(Target.Row, 2) = "F" Then
MsgBox "Non puoi scrivere in queste celle"
Cells(Target.Row, Target.Column) = ""
End If
End If
If Not Intersect(Target, Range("B" & Target.Row)) Is Nothing Then
If Target.Value = "F" Then
Range("M" & Target.Row & ":P" & Target.Row) = ""
End If
End If
Application.EnableEvents = True
End Sub
NB: TI RICORDO CHE IN QUESTO CASO "F" è case sensitive pertanto la devi scrivere in maiuscolo nella col. B altrimenti modifica la macro usando UCASE.
Fai sapere
Saluti
[Modificato da dodo47 24/04/2018 11:41] Domenico
Win 10 - Excel 2016 |
| | Post: 68 | Registrato il: 08/12/2013
| Utente Junior | Excel 2010 | | OFFLINE | |
|
25/04/2018 18:53 | |
Ciao, Domenico.
Grazie per i due codici VBA proposti. Tra questi preferisco il primo.
Ho inserito il codice VBA per convertire in modo automatico in maiuscolo le lettere inserite in minuscolo nel range (A8:M), anche se avrei preferito un range discontinuo (A8:D,F8:F,M8:M) solo per le celle contenenti lettere, ma non ci sono riuscito. Nell'uso, ho notato i seguenti errori:
1) in una registrazione già completata, nel caso in cui vado a cambiare la lettera della col.2 da "P" a "F" o viceversa, i valori inseriti nel range (M:P) non si azzerano in modo automatico come invece dovrebbe essere;
2) se seleziono più celle per cancellarle tutte insieme esce una finestra di errore run-time 13 (tipo non corrispondente);
3) la formattazione della data è variata.
Inoltre, ho creato un codice vba per inserire in automatico una formula nelle celle di due colonne (10 e 11) nel caso siano presenti dei valori nelle corrispondenti celle di altre precedenti colonne (7, 8 e 9). Queste formule però vengono al momento inserite solamente nella riga 8 ma non nelle sottostanti a causa del codice vba errato e incompleto
Grazie per l'aiuto prestato. [Modificato da franco28.2013 25/04/2018 21:51] |
|
|