copia sheets



  • copia sheets
    di gio (utente non iscritto) data: 15/05/2014 14:08:43

    Ciao a tutti,

    ho dei file in una cartella, ognuno con un nome diverso.
    Ciascun file ha dei fogli, di cui solo 1 è popolato con dei dati (e quindi solo quello mi interessa).
    Quello che vorrei fare è una macro che:
    - crei un nuovo workbook nella stessa cartella degli altri
    - prenda il foglio "pippo" dal primo file, il foglio "pluto" dal secondo, etc. e li metta tutti nel workbook appena creato

    Posto il codice creato: dal wb 1-5 mi serve il foglio con nome 1-5, dal wb 6+ mi serve il foglio 6+, e così via...
    Mi dà errore di run-time 9 quando cerco di attivare il wb successivo e non capisco perché.

    NOTA: tutti i wb sono in una cartella e sono chiusi. Per lanciare la macro ne apro uno a caso (di solito l'1-5)

    Grazie!
     
    Sub Mover3()
       Dim BkName As String
       Dim thisWb As Workbook
       Dim wbName As String
       Dim prefix As String
    
       prefix = "w19_"
       
       'Imposta il numero di fogli da inserire di default nei nuovi workbooks
         With Application
             .SheetsInNewWorkbook = 1
         End With
        
         'Crea un nuovo wb con nome specificato, nella stessa cartella del wb attivo al momento
         Set thisWb = ActiveWorkbook
         Workbooks.Add
         wbName = "_w19_OVERALL.xlsx"
         ActiveWorkbook.SaveAs Filename:=thisWb.Path & "" & wbName
         'ActiveWorkbook.Close savechanges:=False
         
         'Nomi dei fogli
         ws1 = "1-5"
         ws2 = "1-5_tecnico"
         ws3 = "6+"
         ws4 = "Corporate"
         ws5 = "DSL"
         ws6 = "VRU"
         
         'Copia dei fogli e spostamento nel file aggregato
         'Segmento 1-5
         BkName = prefix & ws1 & ".xlsx"
         Workbooks(BkName).Sheets("1-5").Copy _
            Before:=Workbooks(wbName).Sheets(1)
         
         'Segmento 6+   
         BkName = prefix & ws3 & ".xlsx"
         Windows(BkName).Activate                                           <-- qui mi dà errore!!!!!!!!!!!
         'Namesheet = Workbooks(BkName).Sheets("1-5").Name
         Workbooks(BkName).Sheets("6+").Copy _
            After:=Workbooks(wbName).Sheets(3)
            
    End Sub
    



  • di lepat (utente non iscritto) data: 15/05/2014 15:51:01

    mi sembra inutile la linea
    Windows(BkName).Activate
    prova a eliminarla o commentarla



  • di gio (utente non iscritto) data: 15/05/2014 16:21:07

    E' vero era inutile, adesso ho modificato un po' il codice e va.
    L'unica cosa è che i file di input che utilizzo per costruire l'aggregato devono per forza essere aperti. C'è un modo per eseguire la macro solo con uno dei file aperti e gli altri chiusi?

    Grazie!



  • di lepat (utente non iscritto) data: 15/05/2014 18:50:02

    basta che tu apra gli altri tramite codice