aprire file



  • aprire file
    di Alex (utente non iscritto) data: 28/12/2015 15:25:14

    Buonasera a tutti,avrei bisogno di un aiuto per risolvere un problema in vba (premetto che sono una capra analfabeta in materia).
    Vorrei impostare una macro che mi apra una serie di file in una cartella, copi i valori da un range di celle di tali file e li incolli nel file di data base.
    Vi allego due file per specificare quanto mi servirebbe:
    1) la macro legge i file da aprire nella colonna F (precisamente da F8)
    2) tutti i file sono uguali come struttura e sono vengono salvati nel percorso ("F:ImposteImportA")
    3) le celle da copiare in ciascun fiel stanno sempre nel Folgio 1 e sempre in range D1:D10
    4) Copia i valori in D1:D10
    5) Incolla i valori copiati nel foglio DB del file Prova
    6) La riga su cui vengono copiati è sempre la stessa (n.6) mentre la colonna varia ed è quella presente in colonna H del foglio "Aziende" (quindi il ciclo next for dovrebbe leggermi in colonna F il nome del file ed in H la colonna)
    7) chiudere il file aperto al punto 1 e salvarlo (opzionale)

    Siccome so che l'argomento è stato molto trattato ed un pò ho cercato tra i vari topic, ho provato a scrivere una macro ma i risultati fanno acqua (cmq allego anche il codice).
    C'è qualcuno che potrebbe aiutarmi.
    Grazie mille e auguri da Firenze

    Alex
     
    Sub Import()
    
        Dim filename As String
        Dim i As Integer
        Dim inizio As Range
        Dim fine As Range
        Dim wk1 As Worksheet
        Dim wk2 As Worksheet
        Dim sh1 As Worksheet
        Dim fonte As Worksheet
        Dim dest As Worksheet
        Dim colonna As String
        
        Application.ScreenUpdating = False
        
        Set inizio = Range("G4")
        Set fine = Range("G5")
        
        For i = inizio To fine
        
        Set filename = Cells(i, 6).Text
        
        wk1 = Workbooks.Open("F:ImposteImportA" & "" & filename)
        Set fonte = wk1.Worksheets("Foglio1")
        Set wk2 = ThisWorkbook
        Set dest = wk2.Worksheets("DB")
        Set colonna = Range("H" & filename.Row).Text
      
        
        fonte.Range("D1:D10").Copy
        dest.Range("D12").PasteSpecial xlPasteValues
            
        
        wk1.Save
        wk1.Close
        
        
                    
        Next i
                    
    End Sub
    



  • di patel data: 28/12/2015 18:15:27

    prova questa 
     
    Sub Import()
    
    Application.ScreenUpdating = False
    Set ShAz = ThisWorkbook.Sheets("Aziende")
    Set ShDB = ThisWorkbook.Sheets("DB")
    LR = ShAz.Cells(ShAz.Rows.Count, "F").End(xlUp).Row
    For r = 8 To LR
        fname = ShAz.Cells(r, "F").Text
        set wk1 = Workbooks.Open("F:ImposteImportA" & fname)
        wk1.Sheets(1).Range("D1:D10").Copy
        ShDB.Range(colonna & 6).PasteSpecial xlPasteValues
        wk1.Close False
    Next
    Application.ScreenUpdating = True
    End Sub





  • problema
    di Alex (utente non iscritto) data: 28/12/2015 21:24:47

    Intanto grazie Patel, poi mi sono permesso di modificare la tua macro che mi dava Errore 400. Quella che uso ora mi apre il file ma non mi copia le celle. Mi rende un mess "Variabile Oggetto o variabile del blocco with non impostata".

     
    Sub Import()
    Dim fname
        Dim r As Integer
        Dim LR As Integer
        Dim colonna As String
        Dim wk1 As Workbook
        Dim sh1 As Range
        Dim shAz As Worksheet
        Dim shDB As Worksheet
    
    Application.ScreenUpdating = False
    
    Set shAz = ThisWorkbook.Sheets("Aziende")
    Set shDB = ThisWorkbook.Sheets("DB")
    
    LR = shAz.Range("G5")
    For r = 8 To LR
        fname = shAz.Cells(r, 6).Text
        wk1 = Workbooks.Open("E:ImposteImportA" & fname)
        sh1 = wk1.Sheets("Foglio1")
        sh1.Range("D1:D10").Copy
        colonna = shAz.Cells(r, 7).Text
        shDB.Range(colonna & 6).PasteSpecial xlPasteValues
        wk1.Close
    Next r
    
    Application.ScreenUpdating = True
    
    End Sub



  • di patel data: 29/12/2015 08:04:16

    io non ho potuto testare, mi manca il file da importare





  • di Alex (utente non iscritto) data: 29/12/2015 08:48:47

    giusto...
    eccolo



  • di Alex (utente non iscritto) data: 29/12/2015 08:51:07

    Gli altri sono tutti uguali a questo..cambia la denominazione del file ma non la struttura



  • di patel data: 29/12/2015 09:57:43

    il mio codice mi funziona perfettamente, tu hai fatto i seguenti errori:
    NB. dichiarare le variabili è una pratica consigliata, ma occorre dichiararle bene

     
        Dim sh1 As Range ' non è un range
        wk1 = Workbooks.Open("F:Download" & fname) ' omesso il Set
        sh1 = wk1.Sheets("Foglio1") ' omesso il Set
        colonna = shAz.Cells(r, 7).Text ' la colonna è in H






  • di Alex (utente non iscritto) data: 29/12/2015 22:39:03

    Hai perfettamente ragione (non che ne dubitassi) ora funziona.
    La dichiarazione del shDB e la def della colonna sono state delle sviste che avevo corretto già ieri notte ma l'uso del Set è frutto dell'ignoranza di chi usa il "giocattolo" nuovo senza leggere le istruzioni.
    Grz mille Patel
    Una cosa: volevo chiudere la macro spostando tutti i file della cartella A in una cartella (chiamiamola B). Sto leggendo vecchi topic del sito ma se avessi qualche suggerimento., è naturalmente ben accetto.
    Grazie ancora e buon anno
    Alex



  • di patel data: 30/12/2015 08:56:39

    prova così
     
    Sub movefile2()
    oldpath = "E:provavecchi"
    newpath = "E:prova
    uovi"
    fname = Dir(oldpath & "*.xls*")
    Do While fname <> ""
        Name oldpath & fname As newpath & fname
        fname = Dir
    Loop
    End Sub