Sviluppare funzionalita su Microsoft Office con VBA Creazione Tasto Copia Foglio Precedente e Cancella Contenuto Celle

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

    FROST220684
    Partecipante

      Salve a tutti,

      Ho un quesito un po complesso ed allego un file esempio cosi sarà più chiaro. Cose da fare:

      1. Tramite il tasto copia foglio collegato ad una macro: Copiare foglio precedente denominato Cassa del 06-01-2020 e rinominarlo con data progressiva (Es: foglio Cassa del 06/01/2020 lo deve rinominare Cassa del 07/01/2020 e cosi via essendo presente il tasto in ogni foglio mi dovrebbe creare il foglio del giorno successivo in base al calendario.

      2. lo stesso tasto di copia foglio dovrebbe eliminare nel foglio creato i contenuti di alcune celle che nel file esempio ho colorato di giallo.

      3. Nella cella rossa del nuovo foglio dovrebbe essere riportato il dato presente nella cella verde pero del foglio precedente.

      è possibile? faciliterebbe il mio lavoro e quello di tutti grazie mille a tutti quelli che mi daranno una mano.

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

      DeletedUser
      Bloccato
        13 pts

        Si può fare, ma chiaramente occorre conoscere il linguaggio VBA .

        Se non lo conosci può essere il momento giusto per iniziare a studiarlo.
        Se invece non lo conosci, direi che fai prima a fartelo a mano.

        Facci sapere le tue intenzioni.

        #22279 Score: 0 | Risposta

        FROST220684
        Partecipante

          Purtroppo non conosco bene il linguaggio VBA sono abbastanza avanti però purtroppo non avendo le basi è tutto più lungo. Piano piano sto iniziando ma questa funzione mi servirebbe per lavoro e non penso di riuscirci da solo e speravo che qualcuno mi aiutasse a capire ed aiutarmi a scrivere il codice con più facilità.

           

          Grazie mille a tutti 

          #22290 Score: 0 | Risposta

          albatros54
          Moderatore
            89 pts

            Se ho capito.

            ti posto queste due righe di codice, incollali in un modulo,e poi esegui il codice postato nella macro"albatros54Post22269", forse fa quello che hai chiesto.

            Option Explicit
            Sub albatros54Post22269()
                Dim p As String
                Dim q As Single
                Dim d As String
                Cells.Select
                p = ActiveSheet.name
                q = ActiveSheet.Range("o68")
                d = aume(p)
                Selection.Copy
                Sheets.Add After:=Sheets(Sheets.Count)
                ActiveSheet.Paste
                Range("a3:t44").FormulaR1C1 = ""
                ActiveSheet.name = d
                ActiveSheet.Range("a56") = q
                Range("a1").Select
            End Sub
            
            Public Function aume(m)
                Dim MyArray As Variant, data As Variant
                Dim stringa As String, f As String, nomeaumentato As String
                Dim name As String
                Dim rng As Range
                Dim nome As Variant
                Dim aumento As Long
                stringa = ActiveSheet.name
                MyArray = Split(stringa)
                nome = MyArray(2)
                data = Split(nome, "-")
                aumento = (data(0)) + 1
                If Len(aumento) < 2 Then
                    aumento = "0" & (data(0)) + 1
                Else
                    aumento = (data(0)) + 1
                End If
                f = aumento & "-" & data(1) & "-" & data(2)
                nomeaumentato = MyArray(0) & " " & MyArray(1) & " " & f
                aume = nomeaumentato
            
            End Function
            

             

            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 )
            #22292 Score: 0 | Risposta

            DeletedUser
            Bloccato
              13 pts

              Certo che ti aiutiamo, te l'ho chiesto perché non conosciamo nulla della tua preparazione/intenzioni.

              Per la copia puoi usare il metodo Copy dell'oggetto Worksheet

              WORKSHEET
              https://docs.microsoft.com/it-it/office/vba/api/excel.worksheets

              COPY
              https://docs.microsoft.com/it-it/office/vba/api/excel.worksheet.copy

               

              Una volta copiato il foglio devi selezionare le celle da azzerare usando l'oggetto Range:
              https://docs.microsoft.com/it-it/office/vba/api/excel.range(object)

              selezionando le celle da azzerare:
              Selezione di celle e intervalli utilizzando procedure di Visual Basic in Excel
              https://docs.microsoft.com/it-it/office/troubleshoot/office-developer/select-cells-rangs-with-visual-basic

               

              Infine, assolutamente indispensabile, è la BASE per imparare a fare il DEBUG del proprio codice per vedere e capire cosa fa il codice, come trovare gli errori e di conseguenza come correggerli, senza il quale è impossibile imparare a programmare (qualsiasi linguaggio):

              Debugging in Excel VBA - Easy Excel Macros
              https://www.excel-easy.com/vba/examples/debugging.html

              MS Excel 2013: VBA Debugging Introduction
              https://www.techonthenet.com/excel/macros/vba_debug2013.php

               

              Inizia e se hai difficoltà il FORUM è qui!  

               

              #22299 Score: 0 | Risposta

              DeletedUser
              Bloccato
                13 pts

                Albratos:

                Mi stupisco sempre  quando si sciorinano decine e decine di righe di codice che non hanno alcun scopo didattico, non  c'è nemmeno una, dico una, riga di commento che spieghi all'utente il come e perché, nessuna indicazione 'didattica'. Niente! Solo codice...

                Lo trovo aoncora più strano se fatto addirittura da un MODERATORE che dovrebbe conoscere a menadito il REGOLAMENTO il cui scopo è tutt'altro...

                Un FORUM TECNICO dovrebbe supportare l'utente stimolandolo ad imparare, a farlo crescere, affinché possa risolva da solo i propri problemi, permettendogli di generare in lui quel senso di soddisfazione che gli infonde fiducia e la speranza che anche lui possa, pian piano, acquisire sempre più padronanza.

                Questo comportamento avrebbe uno scopo in un forum 'informativo' che non ha nessun scopo didattico, main un forum tecnico è assurdo, perché chi lo frequenta si aspetta di imparare, di capire, scopire, è curioso, vuole migliorare.

                Comportarsi così significa già disilludere l'utente, come se gli dicessimo:
                Non conosci il VBA? Allora te lo faccio io, da solo non ce la farai mai.

                Chiaramente OGNUNO ha il sacrosanto diritto di comportarsi come meglio crede e pensarla comne vuole, ma da un MODERATORE mi aspetterei l'esempio di un comportamento consono al REGOLAMENTO.

                Evidentemente sono io che sbaglio e non ho capito nulla.

                 

                #22316 Score: 0 | Risposta

                FROST220684
                Partecipante

                  Caro gibra hai ragione su tutta la linea ma devo dire che apprezzo sia il tuo commento che quello di albatros. Certo il suo codice con dei commenti sarebbe stato più utile. Il tuo di gran lunga più educativo anche se per la fretta che ho e le poche competenze attualmente ci metterei una vita ma stai sicuro che incomincerò a leggere e cercare di capire. Grazie mille ad entrambi provo e vi aggiorno.

                  #22328 Score: 0 | Risposta

                  DeletedUser
                  Bloccato
                    13 pts

                    Comunque non mi interessa più partecipare in un forum che non mantiene coerenza, che afferma una cosa e poi ne fa un'altra.

                    Vi saluto e buona continuazione.

                    #22332 Score: 0 | Risposta

                    albatros54
                    Moderatore
                      89 pts

                      gibra ha scritto:

                      Comunque non mi interessa più partecipare in un forum che non mantiene coerenza, che afferma una cosa e poi ne fa un'altra.

                      Vi saluto e buona continuazione.

                      Non voglio far polemica, non è nel mio DNA,nella mia lunga esperienza lavorativa e di vita, ho incontrato molte persone che sono state poco coerente nel loro modo di fare, ma non per questo li ho allontanate anzi, ho cercato di correggere il loro operato.
                      Poi da noi c'è un detto che recita "Ogni testa è tribunale", tradotto "Ognuno decide il proprio comportamento".

                      gioacchino

                       

                       

                      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 )
                      #22398 Score: 0 | Risposta

                      FROST220684
                      Partecipante

                        Ciao Albatros,

                        Giusto per chiudere il discorso mi sembra una reazione un po esagerata. Anche perchè sono io a decidere se il tuo aiuto mi interessa o meno. Ed io l'ho trovato utilissimo anche perchè il codice non è perfetto ma io ho capito dove modificarlo per quello che mi serviva. ti allego codice modificato: 

                        Option Explicit
                        Sub albatros54Post22269()
                            Dim p As String
                            Dim q As Single
                            Dim d As String
                            Cells.Select
                            p = ActiveSheet.name
                            q = ActiveSheet.Range("o68")
                            d = aume(p)
                            Selection.Copy
                            Sheets.Add After:=Sheets(Sheets.Count)
                            ActiveSheet.Paste
                            Range("a3:t44").FormulaR1C1 = ""
                            Range("a60").FormulaR1C1 = ""
                            Range("a64").FormulaR1C1 = ""
                            Range("a68").FormulaR1C1 = ""
                            Range("a72").FormulaR1C1 = ""
                            Range("e56:j70").FormulaR1C1 = ""
                            Range("k56:r62").FormulaR1C1 = ""
                            Range("o64").FormulaR1C1 = ""
                            ActiveSheet.name = d
                            ActiveSheet.Range("a56") = q
                            Range("a1").Select
                        End Sub
                        
                        Public Function aume(m)
                            Dim MyArray As Variant, data As Variant
                            Dim stringa As String, f As String, nomeaumentato As String
                            Dim name As String
                            Dim rng As Range
                            Dim nome As Variant
                            Dim aumento As Long
                            stringa = ActiveSheet.name
                            MyArray = Split(stringa)
                            nome = MyArray(2)
                            data = Split(nome, "-")
                            aumento = (data(0)) + 1
                            If Len(aumento) < 2 Then
                                aumento = "0" & (data(0)) + 1
                            Else
                                aumento = (data(0)) + 1
                            End If
                            f = aumento & "-" & data(1) & "-" & data(2)
                            nomeaumentato = MyArray(0) & " " & MyArray(1) & " " & f
                            aume = nomeaumentato
                        
                        End Function

                        Mancava qualche cella all'interno della formula che cancellava i contenuti.

                        Senti ho un piccolo problema che non capisco da cosa possa dipendere:

                        1. Quando utilizzo il tasto copia foglio crea tutto in modo corretto l'unico problema è che effettua una sorta di zoom su tutta la pagina ed inoltre mi ingrandisce il tasto Stampa che ti trovi in basso sulla destra e che ho evidenziato nel foglio allegato.

                        Nel file allegato ho gia eseguito la funzione in modo da farti vedere come viene ingrandito il foglio ed il tasto stampa.

                        Spero potrai aiutarmi sei stato utilissimo.

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

                        FROST220684
                        Partecipante

                          Ciao Albatros,

                          Ho riscontrato anche un altro problema di codice che non so come posso risolverlo quando arrivo al 31-01-2020 invece di passare al 01-02-2020 mi crea un foglio Cassa del 32-01-2020. Non riusciamo a fargli cambiare in automatico il giorno come una sorte di calendario attivo?

                           

                          Ti allego nuovo file

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

                          albatros54
                          Moderatore
                            89 pts

                            aggiungi , subito dopo la riga

                            ActiveSheet.Range("a56") = q

                            della routine "albatros54Post22269"

                            questa riga di codice

                            ActiveWindow.Zoom = 55

                             

                             

                            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 )
                            #22407 Score: 0 | Risposta

                            FROST220684
                            Partecipante

                              perfetto lo zoom della pagine è apposto.

                              rimane il problema dell'ingrandimento del tasto "Stampa"

                              e dell'aggiornamento data come da calendario

                              riesci a darmi una mano a risolvere anche se ti serve più tempo non fa niente

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

                              FROST220684
                              Partecipante

                                Albatros riesci ad aiutarmi a finire il codice senza errori?

                                 

                                Grazie mille in anticipo

                                #22498 Score: 0 | Risposta

                                FROST220684
                                Partecipante

                                  ciao a tutti

                                  Sono riuscito ad eliminare il problema dell'ingrandimento del tasto stampo facendo i seguenti passaggi:

                                  Cliccando sull'immagine ----> Dimensioni e Proprietà -----> Attivare opzione "Sposta e ridimensiona con le celle" all'interno della scheda proprietà.

                                   

                                  Resta ora solo il problema del cambio data a fine mese qualche uomo/donna di buon cuore mi aiutaaaaaaaa 🙂

                                   

                                  Grazie a tutti

                                  #22499 Score: 0 | Risposta

                                  albatros54
                                  Moderatore
                                    89 pts

                                    nella funzione "Aume" ho dichiarato la variabile "nome" come Data.

                                    Option Explicit
                                    Sub albatros54Post22269()
                                        Dim p As String
                                        Dim q As Single
                                        Dim d As String
                                        Cells.Select
                                        p = ActiveSheet.name
                                        q = ActiveSheet.Range("o68")
                                        d = aume(p)
                                        Selection.Copy
                                        Sheets.Add After:=Sheets(Sheets.Count)
                                        ActiveSheet.Paste
                                        Range("a3:t44") = ""
                                        Range("a60") = ""
                                        Range("a64") = ""
                                        Range("a68") = ""
                                        Range("a72") = ""
                                        Range("e56:j70") = ""
                                        Range("k56:r62") = ""
                                        Range("o64") = ""
                                        ActiveSheet.name = "Cassa del " & d
                                        ActiveSheet.Range("a56") = q
                                        ActiveWindow.Zoom = 55
                                        Range("a1").Select
                                    End Sub
                                    
                                    Public Function aume(m)
                                        Dim MyArray As Variant, data As Variant
                                        Dim stringa As String, f As String, nomeaumentato As String
                                        Dim name As Date
                                        Dim rng As Range
                                        Dim nome As Date
                                        Dim aumento As String
                                        stringa = ActiveSheet.name
                                        MyArray = Split(stringa)
                                        nome = MyArray(2)
                                        nomeaumentato = nome + 1
                                        nomeaumentato = Replace(nomeaumentato, "/", "-")
                                        aume = nomeaumentato
                                    
                                    End Function
                                    

                                     

                                    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 )
                                    #22501 Score: 0 | Risposta

                                    FROST220684
                                    Partecipante

                                      Albatrosssssssssss funziona alla grandeeeeeee.

                                      Grazie.

                                      Posto il codice modificato e corretto. Grazie mille.

                                      Option Explicit
                                      Sub albatros54Post22269()
                                          Dim p As String
                                          Dim q As Single
                                          Dim d As String
                                          Cells.Select
                                          p = ActiveSheet.name
                                          q = ActiveSheet.Range("o68")
                                          d = aume(p)
                                          Selection.Copy
                                          Sheets.Add After:=Sheets(Sheets.Count)
                                          ActiveSheet.Paste
                                          Range("a3:t44").FormulaR1C1 = ""
                                          Range("a60").FormulaR1C1 = ""
                                          Range("a64").FormulaR1C1 = ""
                                          Range("a68").FormulaR1C1 = ""
                                          Range("a72").FormulaR1C1 = ""
                                          Range("e56:j70").FormulaR1C1 = ""
                                          Range("k56:r62").FormulaR1C1 = ""
                                          Range("o64").FormulaR1C1 = ""
                                          ActiveSheet.name = "Cassa del " & d
                                          ActiveSheet.Range("a56") = q
                                          ActiveWindow.Zoom = 55
                                          Range("a1").Select
                                          
                                      End Sub
                                      
                                      
                                      
                                      Public Function aume(m)
                                          Dim MyArray As Variant, data As Variant
                                          Dim stringa As String, f As String, nomeaumentato As String
                                          Dim name As Date
                                          Dim rng As Range
                                          Dim nome As Date
                                          Dim aumento As String
                                          stringa = ActiveSheet.name
                                          MyArray = Split(stringa)
                                          nome = MyArray(2)
                                          nomeaumentato = nome + 1
                                          nomeaumentato = Replace(nomeaumentato, "/", "-")
                                          aume = nomeaumentato
                                      
                                      End Function
                                      
                                      
                                    Login Registrati
                                    Stai vedendo 17 articoli - dal 1 a 17 (di 17 totali)
                                    Rispondi a: Creazione Tasto Copia Foglio Precedente e Cancella Contenuto Celle
                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                    Le tue informazioni: