› Sviluppare funzionalita su Microsoft Office con VBA › celle/righe oggligatorio compilazione
-
AutoreArticoli
-
Ciao a tutti.
Come rendere obbligatorio la compilazione di celle/righe?
--------------------------------------------
se cella precedente è vuota avviso
se riga precedente è vuota errore
del range B9:E38--------------------------------------------
l'inserimento delle celle del range F9:F38
non è obbligorio ma se la riga del range
B9:E38 è vuota deve dare errore--------------------------------------------
grazie
Allegati:
You must be logged in to view attached files.Ciao, prova a vedere se questa macro messa nel Modulo del Foglio1 fa quello che chiedi (se hai dubbi o vuoi chiarimenti sul codice chiedi pure):
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.CountLarge > 1 Then Exit Sub On Error GoTo safetyExit Application.EnableEvents = False '--- Controllo per B9:E38 --- If Not Intersect(Target, Range("B9:E38")) Is Nothing Then If Target.Value <> "" Then Dim rigaSopra As Range Set rigaSopra = Range("B" & Target.Row - 1).Resize(1, 4) If (Application.CountBlank(rigaSopra) > 0) _ Or (Target.Column > 2 And IsEmpty(Target.Offset(0, -1))) Then MsgBox "Il campo precedente è obbligatorio ma non compilato!", vbExclamation Target.Value = "" End If End If '--- Controllo per F9:J38 --- ElseIf Not Intersect(Target, Range("F9:J38")) Is Nothing Then If Target.Value <> "" Then Dim rngBE As Range Set rngBE = Range("B" & Target.Row).Resize(1, 4) If Application.CountBlank(rngBE) > 0 Then MsgBox "I campi in """ & rngBE.Address(0, 0) & """ sono obbligatori!", vbExclamation Target.Value = "" End If End If End If safetyExit: Application.EnableEvents = True End Subciao,
allego altra soluzione, se non vuoi che vengano cancellati i dati erroneamente inseriti (quindi che esca solo il messaggio) vanno cancellate le righe con !!!!!!!
Da inserire nella cartella di Foglio1 (gestione eventi)Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Range("B9:J38"), Target) Is Nothing Then If Target.Count > 1 Then Exit Sub Application.EnableEvents = False If Target.Column > 1 And Target.Column < 6 Then If Target <> "" And Target.Column > 2 And Cells(Target.Row, Target.Column - 1) = "" Then MsgBox "cella precedente non compilata" Target.ClearContents ' !!!!!!!! End If If Target <> "" And Application.CountA(Range("B" & Target.Row - 1 & ":E" & Target.Row - 1)) = 0 Then MsgBox "riga precedente non compilata" Target.ClearContents ' !!!!!!!! End If End If If Not Intersect(Range("F9:F38"), Target) Is Nothing Then If Target <> "" And Application.CountA(Range("B" & Target.Row & ":E" & Target.Row)) = 0 Then MsgBox ("inserire dati in B" & Target.Row & ":E" & Target.Row) Target.ClearContents ' !!!!!!!! End If a = 1 End If Application.EnableEvents = True End If End Subperchè non mi fa inserire il post?
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Range("B9:J38"), Target) Is Nothing Then If Target.Count > 1 Then Exit Sub Application.EnableEvents = False If Target.Column > 1 And Target.Column < 6 Then If Target <> "" And Target.Column > 2 And Cells(Target.Row, Target.Column - 1) = "" Then MsgBox "cella precedente non compilata" Target.ClearContents ' !!!!!!!! End If If Target <> "" And Application.CountA(Range("B" & Target.Row - 1 & ":E" & Target.Row - 1)) = 0 Then MsgBox "riga precedente non compilata" Target.ClearContents ' !!!!!!!! End If End If If Not Intersect(Range("F9:F38"), Target) Is Nothing Then If Target <> "" And Application.CountA(Range("B" & Target.Row & ":E" & Target.Row)) = 0 Then MsgBox ("inserire dati in B" & Target.Row & ":E" & Target.Row) Target.ClearContents ' !!!!!!!! End If a = 1 End If Application.EnableEvents = True End If End SubAllego altra soluzione, se non vuoi che vengano cancellati i dati erroneamente inseriti (quindi che esca solo il messaggio) vanno cancellate le righe con !!!!!!!
Da inserire nella cartella di Foglio1 (gestione eventi)
Scivo un altro post perchè scrivendo descrizione e codice nello stesso (post) era impossibile inserire la risposta (ho provato n mila+1 volte)
Grazie lukereds e alexps81 penso funzionano tutte e due le vostre soluzioni.
Ora vedo quale usare in ufficio.
Grazie ancora.
Allego altra soluzione, se non vuoi che vengano cancellati i dati erroneamente inseriti (quindi che esca solo il messaggio) vanno cancellate le righe con !!!!!!!
Da inserire nella cartella di Foglio1 (gestione eventi)
ciao,
spero di sbagliarmi ma credo che
a = 1sia un refuso.
Buona giornata
si a= 1 mi serviva per verificare il passaggio nella sub, non serve. comunque non fa "danni"
comunque non fa "danni"
vero,
se non si ha l'Option Explicit in testa al modulo
e se si ha option explicit la variabile viene segnalata come non dichiara... ergo non fa danni
e se si ha option explicit la variabile viene segnalata come non dichiara... ergo non fa danni
vamose a capì...., o come è sicuramente meglio, famose a capì...
io non ho detto che fa danni! Ho detto che forse.... era un refuso....
il fatto che venga segnalata dall'Option Explicit, può essere un problema solo per i "principianti"
gli altri sanno come risolvere la "segnalazione"
-
AutoreArticoli
