Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Bloccare celle vuote se cambia valore di altra cella

Ultimo Aggiornamento: 25/04/2018 18:53
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]
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 15:24. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com