2014-10-19 27 views
5

Sono un principiante in Visual Basic. Posso utilizzare Excel 2010 o Excel 2013 per questa attività.Combina più cartelle di lavoro di Excel in una singola cartella di lavoro

Ho dozzine di cartelle di lavoro con dati sul primo foglio di lavoro di ciascuno. Ad esempio One.xlsx, Two.xlsx, Three.xlsx, Four.xlsx contengono ciascuno informazioni sul rispettivo Foglio1.

Ho bisogno che le informazioni su Sheet1 da ogni cartella di lavoro vengano combinate in una singola cartella di lavoro con fogli che sono denominati dal nome del file della cartella di lavoro originale. Ad esempio, combinato.xlsx avrebbe 4 fogli di nome Uno, Due, Tre, Quattro. In ogni caso tutte le informazioni sui fogli di lavoro sottostanti devono essere copiate e combinate nella nuova cartella di lavoro come mostrato di seguito.

  • Il formato ho bisogno

enter image description here

ho trovato questo Macro/Add-In online che mi viene vicino a quello che ho bisogno di utilizzare i file aperti aggiungere a scelta.

http://www.excelbee.com/merge-excel-sheets-2010-2007-2013#close

Apri i file Add-In permette con successo a me di aggregare i fogli di lavoro delle varie cartella di lavoro in una singola cartella di lavoro. Tuttavia, le schede non sono denominate dal nome del file originale.

  • Corretta aggregazione di fogli, ma nomi di fogli di lavoro errati.

enter image description here

Per adesso tutti Workbooks sottostanti sarà nella stessa cartella. La possibilità di sfogliare e selezionare i file sarebbe piacevole se questo dovesse mai cambiare, ma se ciò fosse troppo difficile, sarebbe sufficiente indicare il percorso della directory nel codice Visual Basic. Per quanto l'output combinato risultante probabilmente dovrebbe essere una nuova cartella di lavoro, il nome file della nuova cartella di lavoro non è così importante. Ad esempio, potrebbe essere chiamato combined.xlsx.

risposta

6

Quanto segue esegue l'operazione.

Option Explicit 

Private Sub CommandButton1_Click() 

Dim directory As String, fileName As String, sheet As Worksheet, total As Integer 
Dim WrdArray() As String 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

directory = "c:\test\" 
fileName = Dir(directory & "*.xl??") 

Do While fileName <> "" 
    Workbooks.Open (directory & fileName) 
     WrdArray() = Split(fileName, ".") 
     For Each sheet In Workbooks(fileName).Worksheets 
     Workbooks(fileName).ActiveSheet.Name = WrdArray(0) 
      total = Workbooks("import-sheets.xlsm").Worksheets.Count 
      Workbooks(fileName).Worksheets(sheet.Name).Copy after:=Workbooks("import-sheets.xlsm").Worksheets(total) 

      GoTo exitFor: 

     Next sheet 

exitFor: 
    Workbooks(fileName).Close 
    fileName = Dir() 
Loop 

Application.ScreenUpdating = True 
Application.DisplayAlerts = True 

End Sub 
+0

è 'import-sheets.xlsm' il file su cui sto eseguendo la macro? – wviana

+0

Potresti aggiungere qualche commento in esso? – wviana

+0

Non più necessario, grazie per il tuo post. aiutami molto Ho fatto dei miglioramenti, dovrei condividerlo? https://gist.github.com/wviana/31d8dac7718b952e1ccf43eb3ee062be Ho risolto alcuni vars, per facilitare l'operazione, eliminando la necessità di chiamare 'Workbooks (fileName)' ogni volta. Ci scusiamo per i commenti in portoghese. – wviana

1

In Excel premere Alt+F11, verrà aperto l'editor VBA di Excel.

L'articolo http://www.excel-spreadsheet.com/vba/debugging.htm spiega alcune nozioni di base su come utilizzarlo.

In Module1 ci sono 2 subroutine brevi opensheets e merge contenenti ~ 50 righe di codice.

Utilizzare F1 con il cursore all'interno di parole che non si capiscono, per imparare cosa significa.

Una volta compreso il codice, è possibile adattarlo alle proprie esigenze.

+0

speravo in un po 'di codice simile a raggiungere il mio obiettivo, piuttosto che partire da zero –

+0

@JayC il codice è lì, proprio nella macro, cambiando per creare nuovi fogli cartella di lavoro o di ridenominazione sono semplici battute. Ma Stack Overflow è ** non servizio di scrittura del codice **. Devi mostrare un po 'di sforzo, scrivere del codice, mostrarlo e Stack Overflow può aiutarti a diagnosticare e superare i problemi concreti di codifica.Vi suggerisco di iniziare a risolvere il vostro compito cercando di capire quelle ~ 50 linee di codice nel file Merge-Macro.xlsm e di generare alcune nuove domande di codifica più concrete. Finora stai andando abbastanza bene – xmojmr

+0

Grazie, sono d'accordo e comprendo alcuni sforzi e un modello per il problema è necessario. Sfortunatamente la macro collegata non è modificabile quindi non potrei usarla per guidarmi. In questo caso un collaboratore è stato in grado di farmi iniziare e l'ho ulteriormente modificato per soddisfare le mie esigenze. –

Problemi correlati