Sviluppare funzionalita su Microsoft Office con VBA Busta Paga: Miglioramento Office 2016

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

    Pasquale
    Partecipante

      Buongiorno, ho un piccolo problema che non riesco a risolvere. Ho creato un foglio Busta Paga con un pulsante collegato ad una macro che dovrebbe; a) duplicare il foglio con con una box per scrivere il nome del nuovo foglio; b) cancellare il dato che c'è nella cella b9 che serve nel gestire i giorni della settimana; c) imputare la nuova data: esempio febbraio; ho creato, leggendo un pò sul web, una sequenza vba ma non arrivo a risolvere il problema;

      Dim nuovoFoglio As Worksheet
      Dim nomeFoglio As String
      Dim cellaDaCancellare As Range

      ' Imposta il foglio corrente
      Set foglioCorrente = ActiveSheet

      ' Chiede all'utente di inserire un nome per il nuovo foglio
      nomeFoglio = InputBox("Inserisci il nome per il nuovo foglio:", "Nuovo Foglio")

      ' Crea una copia del foglio corrente
      If nomeFoglio <> "" Then
      ActiveSheet.Copy After:=Sheets(Sheets.Count)
      ActiveSheet.Name = nomeFoglio

      End If

      ' Cambia il nome del nuovo foglio
      On Error Resume Next ' per gestire eventuali errori nel caso il nome già esista
      nuovoFoglio.Name = nomeFoglio
      On Error GoTo 0 ' ripristina gestione errore standard

      ' Imposta la cella da cancellare
      Set cellaDaCancellare = nuovoFoglio.Range("b9")

      ' Cancella il contenuto della cella
      cellaDaCancellare.ClearContents

      ' Chiede all'utente di inserire una data
      nuovoFoglio.Range("B9").Value = InputBox("Inserisci la data (formato gg/mm/aaaa):", "Inserisci Data")

      End Sub

      Spero in un aiuto per capire dove commetto l'errore e trovare la giusta soluzione.

      Grazie

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

      Raffaele53
      Partecipante
        23 pts

        Prova

        Option Explicit
        Sub DuplicaFoglio()
            Dim nomeFoglio As String
            Dim Num As Long
        Inizio:
        ' Chiede all'utente di inserire un nome per il nuovo foglio
            Num = InputBox("Inserisci il NUMERO del mese. Ex 1,2,3 ecc:", "Nuovo Foglio")
            nomeFoglio = Evaluate("=VLOOKUP(" & Num & ",{1,""Gennaio"";2,""Febbraio"";3,""Marzo"";4,""Aprile"";5,""Maggio"";6,""Giugno"";7,""Luglio"";8,""Agosto"";9,""Settembre"";10,""Ottobre"";11,""Novembre"";12,""Dicembre""},2,FALSE)")
            If IsError(Evaluate("'" & nomeFoglio & "'!A1")) Then
        'Non esiste. Crea il foglio corrente
                ActiveSheet.Copy After:=Sheets(Sheets.Count)
                ActiveSheet.Name = nomeFoglio
        ' Cancella il contenuto della cella ed inserire una data
            Sheets(nomeFoglio).Range("b9") = Num & "/" & "1/" & Year(Date)
            Else
                MsgBox "Foglio già esistente": GoTo Inizio
            End If
        End Sub
        
        #50044 Score: 0 | Risposta

        Pasquale
        Partecipante

          Perfetto, grazie Raffaele adesso guardo bene il codice.

          GRAZIEEEE!!!!

          #50046 Score: 0 | Risposta

          Raffaele53
          Partecipante
            23 pts

            Errore mio, non verifico i dati che vengono immessi. Usa questa

            Option Explicit
            Sub DuplicaFoglio()
                Dim nomeFoglio As String
                Dim Num As Variant
            ' Chiede all'utente di inserire un nome per il nuovo foglio
                Num = InputBox("Inserisci il NUMERO del mese. Ex 1,2,3 ecc:", "Nuovo Foglio")
                If IsNumeric(Num) Or Num = 0 Or Num > 12 Then MsgBox "Numero-carattere errato": Exit Sub
                nomeFoglio = Evaluate("=VLOOKUP(" & Num & ",{1,""Gennaio"";2,""Febbraio"";3,""Marzo"";4,""Aprile"";5,""Maggio"";6,""Giugno"";7,""Luglio"";8,""Agosto"";9,""Settembre"";10,""Ottobre"";11,""Novembre"";12,""Dicembre""},2,FALSE)")
                If IsError(Evaluate("'" & nomeFoglio & "'!A1")) Then
            'Non esiste. Crea il foglio corrente
                    ActiveSheet.Copy After:=Sheets(Sheets.Count)
                    ActiveSheet.Name = nomeFoglio
            ' Cancella il contenuto della cella ed inserire una data
                Sheets(nomeFoglio).Range("b9") = Num & "/" & "1/" & Year(Date)
                End If
            End Sub
            
            #50047 Score: 0 | Risposta

            Pasquale
            Partecipante

              ciao, ho messo questo di codice e mi da errore nell'inserimento del mese.

              Mettendo "date" lui prende l'anno corrente mentre devo partire dal 2022.

              Riguardo il nome della busta, errore mio a non speecificare, devo fare due fogli, uno come si vede e uno denominato "busta paga "mese" 2022 orario

               

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

              Raffaele53
              Partecipante
                23 pts

                Prova

                Option Explicit
                Sub DuplicaFoglio()
                    Dim nomeFoglio1 As String, nomeFoglio2 As String, FgL As String
                    Dim Num As Variant
                    Dim Anno As Long
                    
                    FgL = ActiveSheet.Name
                ' Chiede all'utente di inserire un nome per il nuovo foglio
                    Num = InputBox("Inserisci il NUMERO del mese. Ex 1,2,3 ecc:", "Nuovo Foglio")
                    If IsNumeric(Num) And (Num > 0 And Num <= 12) Then
                        nomeFoglio1 = Evaluate("=VLOOKUP(" & Num & ",{1,""Gennaio"";2,""Febbraio"";3,""Marzo"";4,""Aprile"";5,""Maggio"";6,""Giugno"";7,""Luglio"";8,""Agosto"";9,""Settembre"";10,""Ottobre"";11,""Novembre"";12,""Dicembre""},2,FALSE)")
                        If IsError(Evaluate("'" & nomeFoglio1 & "'!A1")) Then
                            Anno = InputBox("Inserisci l'anno. Ex 2023,2024,ecc ecc:", "Anno")
                'Non esiste. Crea il foglio corrente ed inserire una data
                            Sheets(FgL).Copy After:=Sheets(Sheets.Count)
                            ActiveSheet.Name = nomeFoglio1
                            Sheets(nomeFoglio1).Range("b9") = Num & "/" & "1/" & Anno
                'inserisco l'altro foglio  "busta paga "mese" 2022 orario
                            nomeFoglio2 = "busta paga " & nomeFoglio1 & " " & Anno & " orario"
                            Sheets(FgL).Copy After:=Sheets(Sheets.Count)
                            ActiveSheet.Name = nomeFoglio2
                            Sheets(nomeFoglio2).Range("b9") = Num & "/" & "1/" & Anno
                        End If
                    Else
                        MsgBox "Numero-carattere errato"
                    End If
                End Sub
                
                #50051 Score: 0 | Risposta

                Pasquale
                Partecipante

                  Dopo la tua modifica funziona tutto perfettamente. Ho creato una Busta in Bianco al fine di utilizzare il codice che hai creato.

                  Adesso metterò dei dati e formule che saranno utilizzate in ogni foglio, ho aggiunto dei calcoli che servono al fine della compilazione che verranno riportati nella busta stessa e ti posto il file. Se ritieni di darmi qualche consiglio sono grato di leggerlo.

                  Grazie ancora per il tuo aiuto.

                  Allegati:
                  You must be logged in to view attached files.
                Login Registrati
                Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
                Rispondi a: Busta Paga: Miglioramento Office 2016
                Gli allegati sono permessi solo ad utenti REGISTRATI
                Le tue informazioni: