Macro



  • Macro
    di durante data: 05/11/2016 17:05:29

    Ciao a tutti!
    sono nuovo nel forum ma lavoro, amatorialmente, con excel da parecchi anni.
    Mi trovo ora in difficoltà con un file e volevo chiedere il vostro aiuto..!
    Devo effettuare un report per lavoro e mi trovo con circa 180 fogli excel che dovrei riepilogare in un unico report.
    Dovrei effettuare la somma della cella B14 di ogni file excel presente nel percorso cartella "A:\ ecc"
    ogni file inizia con le stesse lettere "crm"

    Voi come fareste?

    Vi ringrazio anticipatamente..

    A presto



  • di patel data: 05/11/2016 17:35:00

    per fogli intendi 180 fogli di un unico file excel o 180 file excel in una cartella ? se sono 180 file excel in una cartella ci cono soltanto loro o occorre controllare il nome ?





  • di durante data: 05/11/2016 17:41:19

    @patel
    innanzitutto grazie mille per la celere risposta..!

    sono 12 cartelle (gennaio,febbraio,ecc) in ognuna delle quali diversi file excel (in gennaio ce ne sono 12, in febbraio 28 ecc)
    nelle cartelle comunque ci sono solo quei file excel che iniziano per "crm"
    faccio un esempio : in gennaio i file sono i seguenti
    crmbucardo.xlsx
    crmfontane.xlsx
    crmveio.xlsx
    ecc ecc

    grazie ancora!



  • di patel data: 05/11/2016 18:15:45

    prova questa modificando il percorso, la somma in A1 
     
    Sub OpenfileSomma()
    Dim strFile As String
    Set sh = ThisWorkbook.sheets(1)
    mFolder = "F:Downloadprova" ' <<<<<<<< da modificare
    strFile = Dir(mFolder & "*.xls*")
    Do While strFile <> ""
        Workbooks.Open mFolder & strFile
        sh.Range("A1").Value = sh.Range("A1").Value + Range("B14").Value
        ActiveWorkbook.Close False
        strFile = Dir
    Loop
    End Sub






  • di durante data: 05/11/2016 19:03:09

    Ciao patel,
    grazie nuovamente per la risposta ...
    ho inserito il codice, non mi da errori ma in A1 non compare nulla...!
    ho provato anche a modificare xls in xlsx ma nulla..

    Sbaglio io qualcosa?



  • di patel data: 05/11/2016 19:16:57

    hai messo il percorso corretto che termina con ?
    lancia la macro con F8 step by step e controlla se apre i file e cosa succede





  • di durante data: 07/11/2016 10:51:07

    Ciao,
    il percorso l'avevo inserito corretto con la "" finale
    con l'f8 mi restituisce l'errore "errore di run time '13: tipo non corrispondente" evidenziando il codice alla stringa
    "sh.Range("A1").Value = sh.Range("A1").Value + Range("B14").Value"

    grazie mille



  • di patel data: 07/11/2016 12:39:48

    allega il file con la macro ed un paio di file da sommare





  • di Albatros54 data: 07/11/2016 14:14:33

    Se ho capito:
    Scenario : in una cartella ho tutti i file .xls, ho anche un file dove vado a riprodurre il totale di nome Pippo.xls.
    apro il file pippo vba e incollo il codice postato sotto in un modulo, prova a lanciare la routi , dovrebbe fare quello che chiedi.
    PS: la prossima volta allega un file come consigliato da Patel(che saluto) 
     
    Public Sub copia()
        Dim i As Integer
        Dim fg As String
        Dim objFSO As Object
        Dim objFolder As Object
        Dim objFile As Object
        Dim wk As Workbook
        Dim r As Long
    
        With Application
            .ScreenUpdating = False
        End With
        sPath = ThisWorkbook.Path    '& "
    uova cartella"    '<< da Modificare
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objFolder = objFSO.GetFolder(sPath)
        totale = 0
        For Each objFile In objFolder.Files
            myname = Dir(objFile, vbNormal)
            If myname <> ThisWorkbook.Name Then
                Set wk = Workbooks.Open(objFile.Path)
                For i = 1 To wk.Sheets.Count
                    fg = wk.Sheets(i).Name
                    peso = wk.Sheets(fg).Range("b14")
                    nome = wk.Name
                    totale = totale + peso
                Next i
                wk.Close Savechanges:=False
                irow = ThisWorkbook.Sheets("foglio1").Range("a" & Rows.Count).End(xlUp).Row + 1
    
                ThisWorkbook.Sheets("foglio1").Cells(1, 1) = totale + ThisWorkbook.Sheets("foglio1").Cells(1, 1)
                Set wk = Nothing
    
            End If
        Next
    
        With Application
            .ScreenUpdating = True
        End With
        Set wk = Nothing
        Set sh = Nothing
        Set objFile = Nothing
        Set objFolder = Nothing
        Set objFSO = Nothing
    
    End Sub






  • di durante data: 07/11/2016 18:42:44

    Ciao a tutti,

    grazie anche ad Albatros54 per il supporto, ho provato con il tuo codice ma mi restituisce sempre "errore di runtime 5 chiamata di routine o argomento non validi"
    con l'F8 mi evidenzia il passaggio "Set objFolder = objFSO.GetFolder(sPath)"

    domani vi allego un .zip con dei file di prova e la macro

    Grazie ancora, siete gentilissimi!