Condividi tramite

MACRO IMPORTARE DATI DA VARI FILES .XLS

Anonimo
2014-04-22T13:05:53+00:00

Buongiorno!

Premetto che non so se sia possibile effettuare ciò che vorrei realizzare...e che sono piuttosto novizio di VBA...provo a spiegare il problema...

Devo creare un elenco, importando i dati da diversi files salvati in una cartella nota (c:\Schede Strumenti).

Questi files sono tutti excel e sono in numero potenzialmente variabile, ogni volta che viene aggiunto uno strumento infatti, viene aggiunto un file (es. CP-0001.xls , CP-0002.xls etc. ma non sono per forza progressivi).

Da ognuno di questi files dovrei estrapolare i dati contenuti in determinate celle, creando una matrice che in colonna A presenterà quindi l'elenco dei files senza estensione (es. CP-0001), e sulle relative righe i dati estratti dalle celle dello stesso file...

spero di essere riuscito a spiegarmi...non riesco proprio a venirne a capo...

Ringrazio in anticipo tantissimo!!!!

Luca

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2014-04-22T23:37:15+00:00

Ciao Luca,

Prova qualcosa del genere:

Alt-F11 per aprire l'editor di VBA

Alt-IMper inserire un nuovo modulo di codice

Nel nuovo modulo vuoto, incolla il seguente codice:

'===========>>

Option Explicit

'----------->>

Public Sub Tester()

    Dim FSO As Object

    Dim oFile As Object

    Dim oFiles As Object

    Dim oFolder As Object

    Dim srcWb As Workbook, destWB As Workbook

    Dim srcSH As Worksheet, destSH As Worksheet

    Dim srcRng As Range, destRng As Range

    Dim arrIn() As Variant, arrHeaders As Variant

    Dim i As Long, j As Long, k As Long

    Const sPercorso As String = "C:\Schede Strumenti"

    Const sSummary As String = "Riepilogo"

    Const srcShName = "STRINGA"

    Const sNameType As String = "??-####*.xls"

    Const sHeaders As String = _

          "ID,Col2,Col3,Col4,Col5,Col6,Col7,Col8,col9, col10"     '<<==== Modifica

    arrHeaders = Split(sHeaders, ",")

    Set destWB = ThisWorkbook

    With destWB

        On Error Resume Next

        With Application

            .ScreenUpdating = True

            .DisplayAlerts = False

            .Sheets(sSummary).Delete

            .DisplayAlerts = True

            Err.Clear

        End With

        On Error GoTo XIT

        Set destSH = destWB.Sheets.Add(after:=.Sheets(.Sheets.Count))

    End With

    With destSH

        .Name = sSummary

        .Range("A1").Resize(1, UBound(arrHeaders) + 1).Value = arrHeaders

    End With

    Set FSO = CreateObject("Scripting.FileSystemObject")

    Set oFolder = FSO.GetFolder(sPercorso)

    Set oFiles = oFolder.Files

    For Each oFile In oFiles

        With oFile

            Debug.Print oFile.Name

            If .Name Like sNameType Then

                i = i + 1

                Set srcWb = Workbooks.Open(oFile)

                Set srcSH = srcWb.Sheets(srcShName)

                Set srcRng = srcSH.Range("A5:I5")

                j = srcRng.Columns.Count

                ReDim Preserve arrIn(1 To j + 1, 1 To i)

                arrIn(1, i) = Split(oFile.Name, ".")(0)

                For k = 1 To j

                    arrIn(k + 1, i) = srcRng.Cells(k).Value

                Next k

                srcWb.Close savechanges:=False

            End If

        End With

    Next oFile

    With destSH

        Set destRng = destSH.Range("A2").Resize(i, j + 1)

        destRng.Value = Application.Transpose(arrIn)

    End With

XIT:

    Application.ScreenUpdating = True

End Sub

'<<===========

Alt-Q per chiudere l'editor di VBA

Alt-F8 per aprire la finestrina macro

Seleziona Tester | Esegui

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

15 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-04-22T17:10:18+00:00

    Ciao Luca,

    in realtà nella cartella ci sono anche dei files che non mi interessano, quelli che mi interessano hanno tutti la stessa nomenclatura (CP-0000.xls CS-0000.xls SA-0000.xls DA-0000.xls), tutti gli altri non mi interessano.

    Allora, per individuare il file,  basterebbe cercare tutti i file con un nome del tipo ??-0000, dove ?? rapresenta dove ?? rappresenta due caratteri alfabetici e ci sono sempre quattro zeri.

    non ci sono sempre i quattro zeri...per esempio i  files sono CP-0008 CP-0009 CS-0005 SA-0034 DA-0004... il formato è sempre lo stesso LL-NNNN 

    ti faccio un esempio, i dati corrispondenti all' ID sono nella cella A5 del foglio "STRINGA" del file CP-0001.xls, mentre i dati relativi alla "data di scadenza" sono nella cella I5 del medesimo foglio (ce ne sono altri ma non facciamo confusione e ovviamente ogni singolo file avrà queste identiche caratteristiche.)

    Non sarò facilmente confuso e questa informazione è importante, a meno che non sei contento di modificare il codice che potrei postare.

    le celle che devo riportare dal foglio stringa del CP-0001.xls sono A5 - B5 - C5 - D5 - E5 - F5 - G5 - H5 - I5 - J5 

    sei molto gentile nella tua precisione

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-04-22T16:48:48+00:00

    Ciao Luca,

    in realtà nella cartella ci sono anche dei files che non mi interessano, quelli che mi interessano hanno tutti la stessa nomenclatura (CP-0000.xls CS-0000.xls SA-0000.xls DA-0000.xls), tutti gli altri non mi interessano.

    Allora, per individuare il file,  basterebbe cercare tutti i file con un nome del tipo ??-0000, dove ?? rapresenta dove ?? rappresenta due caratteri alfabetici e ci sono sempre quattro zeri.

    ti faccio un esempio, i dati corrispondenti all' ID sono nella cella A5 del foglio "STRINGA" del file CP-0001.xls, mentre i dati relativi alla "data di scadenza" sono nella cella I5 del medesimo foglio (ce ne sono altri ma non facciamo confusione e ovviamente ogni singolo file avrà queste identiche caratteristiche.)

    Non sarò facilmente confuso e questa informazione è importante, a meno che non sei contento di modificare il codice che potrei postare.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2014-04-22T15:35:22+00:00

    dunque,

    in realtà nella cartella ci sono anche dei files che non mi interessano, quelli che mi interessano hanno tutti la stessa nomenclatura (CP-0000.xls CS-0000.xls SA-0000.xls DA-0000.xls), tutti gli altri non mi interessano.

    i dati dei singoli file sono aggiornati periodicamente, e talvolta vengono aggiunti dei files.

    le celle di interesse sono sempre ai medesimi indirizzi si.

    ti faccio un esempio, i dati corrispondenti all' ID sono nella cella A5 del foglio "STRINGA" del file CP-0001.xls, mentre i dati relativi alla "data di scadenza" sono nella cella I5 del medesimo foglio (ce ne sono altri ma non facciamo confusione e ovviamente ogni singolo file avrà queste identiche caratteristiche.)

    vorrei che questi dati venissero riportati in una tabella dove in A2 appaia l'ID (ovvero CP-0001 presente in cella A5 del relativo foglio del relativo file), in B2 la "data di scadenza" e cosi via....

    Nella riga successiva vorrei che lo stesso processo avvenisse per il file successivo (CP-0008.xls) presente nella stessa cartella (i file non hanno numerazione progressiva in realtà).

    per qualsiasi dettaglio resto a disposizione

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2014-04-22T15:01:37+00:00

    Ciao Luca,

    Sono i file di interesse gli unici file nella loro cartella?

    I dati nei singoli file sono statici o sono questi file modificati periodicamente?

    Le celle di interesse in ogni singolo file sono agli stessi indirizzi?

    Queste celle devono essere copiati su una sola riga nella cartella di lavoro di riepilogo?

    Si tratta di quanti file?

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento