Sviluppare funzionalita su Microsoft Office con VBA Salvare Foglio excel tramite vba

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

    Espresso90
    Partecipante

      Ciao a tutti,

      Vi spiego il mio problema. Ho un foglio WorkBook con tanti fogli excel al suo interno. 

      Vorrei salvare uno di questi fogli in un nuovo file excel cancellando automaticamente gli altri fogli, in modo tale che io abbia un nuovo file excel che ha al suo interno un unico foglio excel.

      Spero di essere stato chiaro. 

      #7622 Score: 0 | Risposta

      albatros54
      Moderatore
        83 pts

        tipo posto questo codice, incollalo in un modulo VBA, il codice cancella tutti i fogli del file, tranne quello attivo(attiva il foglio che tu non vuoi cancellare), e salva il nuovo workbook, con il solo foglio attivato.

        Sub eliminaFogli()
            Dim sh As Worksheet
            Dim tSh As Worksheet
            Dim wb As Workbook
        
            'elimina tutti fogli tranne quello attivo
            Set sh = ActiveSheet
            Set wb = ThisWorkbook
            Application.DisplayAlerts = False
            For Each tSh In ThisWorkbook.Worksheets
                If tSh.Name = sh.Name Then
                Else
                    tSh.Delete
                End If
            Next
            Application.DisplayAlerts = True
            ThisWorkbook.Save
        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 )
        #7630 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          245 pts

          Così a occhio però questo metodo mi sembra distruttivo, cioè sovrascrive il file originale.

           

          #7641 Score: 0 | Risposta

          Espresso90
          Partecipante

            Ciao Albatros il codice che mi hai passato funziona correttamente, purtroppo però mi fa chiudere tutti i fogli e mi tiene soltanto l' ultimo. Così facendo però perdo i dati del foglio di lavoro, quello di cui ho bisogno è di un codice che mi salvi un unico foglio in un altro file, tenendo intatto il file Excel di partenza. Dici che è possibile?

            #7649 Score: 0 | Risposta

            albatros54
            Moderatore
              83 pts

              prova cosi

              Sub eliminaFogli()
              Dim sh As Worksheet
              Dim tSh As Worksheet
              Dim wb As Workbook
              
              'elimina tutti fogli tranne quello attivo
              Set sh = ActiveSheet
              Set wb = ThisWorkbook
              Application.DisplayAlerts = False
              For Each tSh In ThisWorkbook.Worksheets
                  If tSh.Name = sh.Name Then
                  Else
                      tSh.Delete
                  End If
              Next
              Application.DisplayAlerts = True
              ThisWorkbook.SaveAs (ThisWorkbook.Path & "\" & sh.Name)
              End Sub

              questa riga di codice ti salva il file modificato con il nome del foglio , nella stesso die del file che hai aperto e non ti modifica il file originario

              ThisWorkbook.SaveAs (ThisWorkbook.Path & "\" & sh.Name)

               

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

              Espresso90
              Partecipante

                Grazie della disponibilità Albatros, funziona perfettamente!

                #7665 Score: 0 | Risposta

                Espresso90
                Partecipante

                  Scusami Albatros, devo chiederti un' altra cosa in merito.

                  Se io all' interno del file ho per esempio 10 fogli e ne voglio tenere 4 ("Fogliox","Foglioy","Fogliow","Foglioz") e questi 4 fogli devono essere salvati ognuno in un nuovo file excel come posso modificare il codice che mi hai passato precedentemente?

                  #7666 Score: 0 | Risposta

                  albatros54
                  Moderatore
                    83 pts

                    puoi fare un ciclo If....Then e salvi in un primo momento il file con i quattro foglii, nel caso del tuo esempio, dopo apri questo file ed elimini i fogli che non ti servono e salvi il file

                     

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

                    vecchio frac
                    Senior Moderator
                      245 pts

                      Potrebbe viceversa con un ciclo posizionarsi uno per uno sui fogli interessati, quindi creare un nuovo Workbook e copiarvi il foglio attivo, quindi salvare il nuovo file. Il concetto è lo stesso 🙂

                      #7676 Score: 0 | Risposta

                      Espresso90
                      Partecipante

                        Sto facendo qualche test, ma non riesco a cavarci fuori niente, Vecchio Frac avreste qualche suggerimento per aiutarmi?

                        Praticamente con il codice seguente: 

                            x = Array("Foglio1", "Foglio2", "Foglio3", "Foglio4")
                            Set sh = ActiveSheet
                            Set wb = ThisWorkbook
                            Application.DisplayAlerts = False
                            For Each tSh In ThisWorkbook.Worksheets
                                Sheets("Foglio1").Activate
                                If tSh.Name = x(0) Or tSh.Name = x(1) Or tSh.Name = x(2) Or tSh.Name = x(3) Then
                                 ThisWorkbook.SaveAs (ThisWorkbook.Path & "\" & sh.Name)
                                 Else
                                    tSh.Delete
                                End If
                            Next

                        Son riuscito a ripulire tutto il file excel e son arrivato ad avere i 4 fogli che mi interessano, adesso praticamente devo salvare ogni singolo foglio in 4 file diversi e ogni file deve avere il nome del foglio al suo interno.

                        #7702 Score: 0 | Risposta

                        Espresso90
                        Partecipante

                          Sto cercando di risolvere utilizzando dei cicli for each ma non riesco ad uscirne, qualcuno ha un consiglio da darmi?

                          #7706 Score: 0 | Risposta

                          vecchio frac
                          Senior Moderator
                            245 pts

                            Capisco, io purtroppo in questi giorni non son molto presente perchè ho da fare. Però non è complicatissimo, hai già scritto il codice per ciclare sui fogli che ti servono, bene, aggiungi un riferimento con set wbnew a un nuovo Workbook, dentro il ciclo copy e incolli ogni foglio nel nuovo file, lo salvi e lo chiudi.

                            #7709 Score: 0 | Risposta

                            albatros54
                            Moderatore
                              83 pts

                              Ti posto questo codice che ho preso dal Book "Excel and Vba di Bill Jelen e Tracy Syrstad", naturalmente ho inserito una funzione e ho apportato delle modifiche al codice per adattarlo alle tue esigenze, nell'array inserisci i fogli che vuoi salvare, al resto ci pensa il codice.

                              il codice lo devi incollare in un modulo VBA.

                              Ciao fai sapere

                              `Option Explicit
                              
                              Sub SplitWorkbook()
                                  Dim ws As Worksheet
                                  Dim DisplayStatusBar As Boolean
                                  Dim NewFileName As String
                                  Dim x() As Variant
                                  Dim a As Integer
                                  x = Array("Foglio3", "Foglio4", "Foglio5", "Foglio6")
                                  Application.DisplayAlerts = False
                                  For Each ws In ThisWorkbook.Sheets
                                      NewFileName = ThisWorkbook.Path & "\" & ws.Name & ".xlsm"
                                      a = LBound(x)
                                      Do
                                          If x(a) = ws.Name Then
                              
                                              ws.Copy
                                              ActiveWorkbook.Sheets(1).Name =ws.name
                                              ActiveWorkbook.SaveAs Filename:=NewFileName, _
                                                                    FileFormat:=xlOpenXMLWorkbookMacroEnabled
                                              ActiveWorkbook.Close SaveChanges:=False
                                          End If
                                          a = a + 1
                                      Loop Until a = UBound(x) + 1
                                  Next
                                  Application.ScreenUpdating = True
                              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 )
                              #7712 Score: 0 | Risposta

                              Espresso90
                              Partecipante

                                Con l' aiuto di entrambi sono riuscito a terminare la macro. Vi ringrazio!

                                #11620 Score: 0 | Risposta

                                mek_1981
                                Partecipante

                                  Buongiorno,

                                      la macro che mi postate è molto interessante e utile anche per me.

                                  Se al posto di nomi fissi dei fogli avessi dei nomi variabili come si modificherebbe la macro?

                                  Per variabili intendo che ad esempio ho 3 fogli che si chiamano pippo1, pluto2, paperino3 ma la prossima volta potrebbero chiamarsi pippo4, pluto2, paperino56...?

                                  Il nome ovviamente varia perchè preso da una colonna di un foglio chiamato "MASTER" colonna E.

                                  Grazie mille.

                                   

                                  #11621 Score: 0 | Risposta

                                  vecchio frac
                                  Senior Moderator
                                    245 pts

                                    Se i fogli da copiare non sono tutti quelli presenti sul workbook, puoi generare un ciclo che, invece di copiare i fogli x, y e z, quando trova il foglio da non copiare (nel tuo esempio, "MASTER") salta il passaggio.

                                    Altrimenti non ci sono problemi, e cicli su tutti i fogli presenti senza preoccuparti di come si chiamano i fogli,

                                    #11622 Score: 0 | Risposta

                                    mek_1981
                                    Partecipante

                                      Ciao Vecchio Frac,

                                        grazie mille della risposta ma io sono una pippa in VBA e quello che so lo ho fatto ritagliando parti di codice da una parte ad un altra...

                                      Se hai voglia di postarmi le righe che devo scrivere te ne sarei grato.

                                      Cerco di chiarire meglio la richiesta...

                                      Nel file MASTER ci sono 10 fogli, di cui 1 Master, e altri 9 fogli che io chiamo con nomi diversi, il cui nome è comunque presente nel foglio Master.

                                      I nomi sono dei fogli sono quindi presenti in una tabella excel presente nel foglio master range D2:O2;

                                      Quello che devo fare è prendere i fogli con i nomi che trovo nella tabella e metterli in un nuovo file.

                                      Per la precisione avrei la necessità di prendere i primi 5 nomi e metterli in un file e gli altri 5 in un altro ancora.

                                      Grazie mille del tuo aiuto.

                                      Matteo

                                       

                                      #11623 Score: 0 | Risposta

                                      vecchio frac
                                      Senior Moderator
                                        245 pts

                                        Allora guarda facciamo così. Apri una nuova discussione, dove descrivi lo scenario, la tua esigenza e il risultato atteso. Magari alleghi un file su cui lavorare. Però  preparati a un lavoro insieme, perchè io non scrivo codice gratis, pretendo che l'utente impari 🙂 

                                        E questa 

                                        mek_1981 ha scritto:

                                        ma io sono una pippa in VBA

                                        non deve essere una giustificazione   

                                        #11624 Score: 0 | Risposta

                                        mek_1981
                                        Partecipante

                                          Ciao vecchio Frac,

                                            ti ringrazio sei gentilissimo!!

                                          Ho aperto una discussione già ti allego il link dove ho caricato quello che ho fatto io...

                                          Macro per generare fogli e salvarli in nuovi documenti

                                          ho allegato il mio lavoro fatto...

                                          Grazie ancora e soprattutto sempre aperto a imparare cose nuove!!

                                          Matteo

                                        Login Registrati
                                        Stai vedendo 19 articoli - dal 1 a 19 (di 19 totali)
                                        Rispondi a: Salvare Foglio excel tramite vba
                                        Gli allegati sono permessi solo ad utenti REGISTRATI
                                        Le tue informazioni: