› Sviluppare funzionalita su Microsoft Office con VBA › Salvare Foglio excel tramite vba
-
AutoreArticoli
-
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.
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 )Così a occhio però questo metodo mi sembra distruttivo, cioè sovrascrive il file originale.
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?
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 )Grazie della disponibilità Albatros, funziona perfettamente!
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?
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 )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 🙂
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.
Sto cercando di risolvere utilizzando dei cicli for each ma non riesco ad uscirne, qualcuno ha un consiglio da darmi?
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.
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 )Con l' aiuto di entrambi sono riuscito a terminare la macro. Vi ringrazio!
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.
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,
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
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
ma io sono una pippa in VBA
non deve essere una giustificazione
Ciao vecchio Frac,
ti ringrazio sei gentilissimo!!
Ho aperto una discussione già ti allego il link dove ho caricato quello che ho fatto io...
ho allegato il mio lavoro fatto...
Grazie ancora e soprattutto sempre aperto a imparare cose nuove!!
Matteo
-
AutoreArticoli