Sviluppare funzionalita su Microsoft Office con VBA Tasto per cancellare più celle (unite) su più fogli

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

    ILMANDO
    Partecipante

      Buongiorno,

      ho provato a cercare ovunque ma tutte le istruzioni che trovavo non vanno bene per il mio file :

      il file ve lo allego  semplificato (l'originale avrebbe 13 operatori) in pratica vorrei creare un tasto che svuoti o porti a zero il valore delle celle dei singoli oeratori (quelle colorate)  in pratica D/E + J/K + P/Q dalla 14 all 23.

       

      Grazie in anticipo

       

      Allegati:
      You must be logged in to view attached files.
      #18375 Score: 0 | Risposta

      Luca73
      Partecipante
        56 pts

        Ecco un esempio...

        Ciao

        Luca

        ub ProcaCanc()
        Dim FoglioW
        Dim RigaW
        For Each FoglioW In ActiveWorkbook.Sheets
            If FoglioW.Range("H1") = "OPERATORE" Then
                For RigaW = 14 To 23 Step 2
                    Intersect(Rows(RigaW), Columns("D")) = ""
                    Intersect(Rows(RigaW), Columns("J")) = ""
                    Intersect(Rows(RigaW), Columns("P")) = ""
                Next
            End If
        Next
            
        
        End Sub
        
        #18388 Score: 0 | Risposta

        ILMANDO
        Partecipante

          cio, ho provato ad inserirlo sul file "esempio" che ho allegato alla discusisone e funziona perfettamente, il mio problema adesso è  (non capendo nulla di macro) nel file che utilizzo i vari fogli di lavoro non si chiamano "operatore" ma ognuno col il nome proprio  (STEFANO,ANDREA,LUCA....)appunto di ogni operatore, dovrò quindi modificare questa riga MA COME ????:

           

          If FoglioW.Range("H1") = "OPERATORE" Then

           

          grazie

          #18396 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            245 pts

            Cioè ogni operatore lavora su una copia del programma? E come fa il programma a sapere chi è l'operatore attivo in quel momento?

            O il file è unico e lo gestisci solo tu? Se devi sempre svuotare le colonne indicate, indipendentemente dal nome dell'operatore, togli le istruzioni If... End If. 

            #18397 Score: 0 | Risposta

            ILMANDO
            Partecipante

              No scusa magari mi sono espresso male, il file viene compilato, durante la giornata alla fine del proprio turno, dal singolo operatore che pre il file, seleziona il "suo foglio" es:stefano compila i camppi a seconda di quello che ha incassato e lo salva.

               

              La mattina dopo io che chiudo la cassa del centro, ho tutti i singoli fogli (singolo operatore) compilati e riportati sul primo foglio di riepilogo, il tasto per cancellare le celle che chiedevo all'inizio lo uso la mattina dopo aver contato i soldi perchè se per caso quel giorno un operatore non viene o non fa cassa, rimarrebbero dentro i valori del giorno prima e conseguentemente i totali sarebbero errati.

              quindi è perfetto quello che hai messo tu sopra ma l posto di "operatore" i fogli si chiamano per nome "stefano,laura......"

              spero di essermi spiegato meglio

              grazie

              #18398 Score: 0 | Risposta

              ILMANDO
              Partecipante

                per essere più precisi ti allego screen dei fogli (il file è unico), in pratica le celle da cancellare per tutti gli operatori m anon per il foglio "chiusura cassa) anche se comunque in quel foglio sono celle vuote che non si compilano

                Allegati:
                You must be logged in to view attached files.
                #18400 Score: 0 | Risposta

                albatros54
                Moderatore
                  83 pts

                  prova cosi:

                  Sub ProcaCanc()
                      Dim FoglioW As Worksheet
                      Dim RigaW As Long
                      For Each FoglioW In ActiveWorkbook.Sheets
                          If FoglioW.Name <> "CHIUSURA CASSA" Then
                              For RigaW = 14 To 23 Step 2
                                  Intersect(Rows(RigaW), Columns("D")) = ""
                                  Intersect(Rows(RigaW), Columns("J")) = ""
                                  Intersect(Rows(RigaW), Columns("P")) = ""
                              Next
                          End If
                      Next
                  
                  End Sub

                   

                  Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                  Sempre il mare, uomo libero, amerai!
                  ( Charles Baudelaire )
                  #18401 Score: 0 | Risposta

                  Luca73
                  Partecipante
                    56 pts

                    Ciao a tutti stavo per scrivere ma Albatros (ciao) mi ha preceduto (stessa idea).

                    Volevo far solo notare che, avendo intuito il problema, nel mio esempio postato sopra non avevo fatto riferimento al nome ma avevo fatto riferimento al contenuto della cella H1 (e non quella sotto dove c'era il nome dell'operatore) in quanto mi sembrava una specie di intestazione.

                    Ciao

                    Luca

                    #18402 Score: 0 | Risposta

                    albatros54
                    Moderatore
                      83 pts

                      forse è meglio cosi  

                      Sub ProcaCanc()
                          Dim FoglioW As Worksheet
                          Dim RigaW As Long
                          Set wb = Workbooks.Parent
                          For Each FoglioW In wb.Worksheets
                              If FoglioW.Name <> "Chiusura Cassa" Then
                                  For RigaW = 14 To 23 Step 2
                                      Intersect(Rows(RigaW), Columns("D")) = ""
                                      Intersect(Rows(RigaW), Columns("J")) = ""
                                      Intersect(Rows(RigaW), Columns("P")) = ""
                                  Next
                              End If
                          Next
                      
                      End Sub
                      

                       

                      Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                      Sempre il mare, uomo libero, amerai!
                      ( Charles Baudelaire )
                      #18403 Score: 0 | Risposta

                      ILMANDO
                      Partecipante

                        non funziona!

                        anzitutto mi dice che devo togliere la protezione che è fondamentale per non modificare accidentalmente le formule

                        allegato foto1

                        se tolgo la protezione e clicco il tasto creato

                        allegato foto2

                        non fa nulla mentre se vado sul singolo foglio lo svuota (solo il foglio attivo).

                         

                         

                        Allegati:
                        You must be logged in to view attached files.
                        #18406 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          245 pts

                          Mi sento però di consigliare al nostro interlocutore di cominciare a interessarsi a VBA per poter essere autonomo nelle modifiche e correzioni al codice 🙂

                          #18407 Score: 0 | Risposta

                          albatros54
                          Moderatore
                            83 pts

                            Ho notato che c'è un piccolo problema, i fogli sono protetti,quindi il codice che ti ho postato cancella i dati del foglio che in quel momento è attivo. Quidi si dovrebbero aggiungere al codice postato altre righe che sproteggano i fogli, per poi rimetterla

                             

                            Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                            Sempre il mare, uomo libero, amerai!
                            ( Charles Baudelaire )
                            #18410 Score: 0 | Risposta

                            ILMANDO
                            Partecipante

                              No no, le celle da cancellare non sono protette, sono le uniche celle libere così che gli operatori possano compilare giornalmente con i rispettivi incassi, quelle celle ( D,J,P, 14-23) sono bloccate sul foglio denominato chiusura cassa che è appunto da escludere dall'utomazione di cancellazione

                              #18411 Score: 0 | Risposta

                              ILMANDO
                              Partecipante

                                questo è perfetto e funziona anche con le protezioni

                                ub ProcaCanc()
                                Dim FoglioW
                                Dim RigaW
                                For Each FoglioW In ActiveWorkbook.Sheets
                                If FoglioW.Range("H1") = "OPERATORE" Then
                                For RigaW = 14 To 23 Step 2
                                Intersect(Rows(RigaW), Columns("D")) = ""
                                Intersect(Rows(RigaW), Columns("J")) = ""
                                Intersect(Rows(RigaW), Columns("P")) = ""
                                Next
                                End If
                                Next

                                End Sub

                                solo che i worksheet anziche chiamarsi "opertore.." hanno i nomi degli operatori singoli come da foto sopra allegata

                                #18412 Score: 0 | Risposta

                                albatros54
                                Moderatore
                                  83 pts

                                  dato che i fogli sono protetti, prova con questa modifica al codice

                                  Sub ProcaCanc()
                                      Dim FoglioW As Worksheet
                                      Dim RigaW As Long
                                      Set wb = Workbooks.Parent
                                      For Each FoglioW In wb.Worksheets
                                          If FoglioW.Name <> "Chiusura Cassa" Then
                                          FoglioW.Activate
                                              For RigaW = 14 To 23 Step 2
                                                  Intersect(Rows(RigaW), Columns("D")) = ""
                                                  Intersect(Rows(RigaW), Columns("J")) = ""
                                                  Intersect(Rows(RigaW), Columns("P")) = ""
                                              Next
                                          End If
                                      Next
                                  
                                  End Sub

                                   

                                  Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                  Sempre il mare, uomo libero, amerai!
                                  ( Charles Baudelaire )
                                  #18413 Score: 0 | Risposta

                                  ILMANDO
                                  Partecipante

                                    albatros54 ha scritto:

                                    Sub ProcaCanc() Dim FoglioW As Worksheet Dim RigaW As Long Set wb = Workbooks.Parent For Each FoglioW In wb.Worksheets If FoglioW.Name <> "Chiusura Cassa" Then FoglioW.Activate For RigaW = 14 To 23 Step 2 Intersect(Rows(RigaW), Columns("D")) = "" Intersect(Rows(RigaW), Columns("J")) = "" Intersect(Rows(RigaW), Columns("P")) = "" Next End If NextEnd Sub

                                    Perfetto, ora chiedo l'impossibile, cancella tutto perfettamente in ordine quando finisce rimane sull'ultimo worksheet, non c'è modo (dato che ame i singoli fogli on interessano) che mi riporti in automatico sul primo foglio "chiusura cassa"?

                                    Sparatemi pure se sto farneticando!!! ;.)

                                     

                                    grazie ancora

                                    #18414 Score: 0 | Risposta

                                    vecchio frac
                                    Senior Moderator
                                      245 pts

                                      Non stai farneticando però vale il consiglio che ti ho dato sopra 🙂

                                      #18416 Score: 0 | Risposta

                                      Luca73
                                      Partecipante
                                        56 pts
                                        Sheets("Chiusura Cassa").Activate

                                        Dopo l'ultimo next

                                        E studia il VBA che è bello....

                                        Ciao 

                                        #18418 Score: 0 | Risposta

                                        scossa
                                        Partecipante
                                          25 pts

                                          Ciao,

                                          si può evitare il metodo .Activate nonostante i fogli protetti; basta dare le giuste gerarchie, cioè non

                                          Rows(RigaW), Columns("D")

                                            ma

                                          FoglioW.Rows(RigaW),  FoglioW.Columns("D")

                                          e gestire correttamente le celle unite:

                                          Sub ProcaCanc()
                                            Dim FoglioW As Worksheet
                                            Dim RigaW As Long
                                            
                                            For Each FoglioW In ThisWorkbook.Worksheets
                                              With FoglioW
                                                If .Name <> "Chiusura Cassa" Then
                                                  For RigaW = 14 To 23 Step 2
                                                    Intersect(.Rows(RigaW), .Columns("D")).MergeArea.ClearContents
                                                    Intersect(.Rows(RigaW), .Columns("J")).MergeArea.ClearContents
                                                    Intersect(.Rows(RigaW), .Columns("P")).MergeArea.ClearContents
                                                  Next
                                                End If
                                              End With
                                            Next
                                          End Sub
                                          

                                          'Notte.

                                           

                                          #18448 Score: 0 | Risposta

                                          ILMANDO
                                          Partecipante

                                            Magnifico grazie tante davvero!

                                          Login Registrati
                                          Stai vedendo 20 articoli - dal 1 a 20 (di 20 totali)
                                          Rispondi a: Tasto per cancellare più celle (unite) su più fogli
                                          Gli allegati sono permessi solo ad utenti REGISTRATI
                                          Le tue informazioni: