Sviluppare funzionalita su Microsoft Office con VBA celle/righe oggligatorio compilazione

Login Registrati
Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
  • Autore
    Articoli
  • #53943 Score: 0 | Risposta

    frank_ciccio
    Partecipante
      3 pts

      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.
      #53945 Score: 0 | Risposta

      alexps81
      Moderatore
        58 pts

        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 Sub
        
        #53950 Score: 0 | Risposta

        LukeReds
        Partecipante
          19 pts

          ciao,

          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 Sub
          #53951 Score: 0 | Risposta

          LukeReds
          Partecipante
            19 pts

            perchè 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 Sub
            #53952 Score: 0 | Risposta

            LukeReds
            Partecipante
              19 pts

              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)

              Scivo un altro post perchè scrivendo descrizione e codice nello stesso (post) era impossibile inserire la risposta (ho provato n mila+1 volte)

              #53956 Score: 0 | Risposta

              frank_ciccio
              Partecipante
                3 pts

                Grazie lukereds e alexps81 penso funzionano tutte e due le vostre soluzioni.

                Ora vedo quale usare in ufficio.

                Grazie ancora.

                #53957 Score: 0 | Risposta

                sgmmar
                Bloccato
                  5 pts

                  LukeReds ha scritto:

                  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 = 1

                  sia un refuso.

                  Buona giornata

                  #53962 Score: 0 | Risposta

                  LukeReds
                  Partecipante
                    19 pts

                    si a= 1 mi serviva per verificare il passaggio nella sub, non serve. comunque non fa "danni"

                    #53963 Score: 0 | Risposta

                    sgmmar
                    Bloccato
                      5 pts

                      LukeReds ha scritto:

                      comunque non fa "danni"

                      vero,

                      se non si ha l'Option Explicit in testa al modulo     

                      #53965 Score: 0 | Risposta

                      LukeReds
                      Partecipante
                        19 pts

                        e se si ha option explicit la variabile viene segnalata come non dichiara... ergo non fa danni

                        #53966 Score: 0 | Risposta

                        sgmmar
                        Bloccato
                          5 pts

                          LukeReds ha scritto:

                          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"

                        Login Registrati
                        Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
                        Rispondi a: celle/righe oggligatorio compilazione
                        Gli allegati sono permessi solo ad utenti REGISTRATI
                        Le tue informazioni: