Condividi:        

CARICARE DATI DA SOTTODIRECTORY

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

CARICARE DATI DA SOTTODIRECTORY

Postdi cd7019 » 11/02/14 22:12

Ciao,
1) ho provato a caricare dei dati in una matrice, però non riesco ad aprire i file presenti nelle sottodirectory, ma solo nella directory principale.
Come posso fare?

Codice: Seleziona tutto
myDir = ThisWorkbook.Path & "\"
NSumm = ActiveWorkbook.Name
myFile = Dir(myDir & "*.xls?")
I1 = 0
Do While myFile <> ""
    If myFile = ThisWorkbook.Name Then GoTo nextF
    Workbooks.Open (myDir & myFile)
    NFILE = NFILE + 1
    For FF = 1 To Worksheets.Count
     NRR = Evaluate("=Max(if(" & Range("A1").Resize(2000,200).Address & "<>"""",row(" & Range("A1").Resize(2000, 200).Address & "),""""))")
        NCC = Evaluate("=Max(if(" & Range("A1").Resize(2000,200).Address & "<>"""",COLUMN(" & Range("A1").Resize(2000, 200).Address & "),""""))")
        For J = 1 To NCC
            For I = 1 To NRR
                I1 = I1 + 1
               COD(I1, J) = Workbooks(myFile).Sheets(FF).Cells(I, J).Value
            Next I
        Next J
    Next FF
    ActiveWorkbook.Close savechanges = False
nextF:
    myFile = Dir
Loop


2) Come posso evitare l'errore nella matrice COD(I,J) <Tipo non corrispondente>
Codice: Seleziona tutto
     IF COD(1,1)= ERRORE  THEN
         ...     
         "CARICA LA MATRICE"
     endif


Grazie
EXCEL 2003
cd7019
Utente Senior
 
Post: 232
Iscritto il: 26/06/12 21:38

Sponsor
 

Re: CARICARE DATI DA SOTTODIRECTORY

Postdi Anthony47 » 12/02/14 01:47

Poiche' lavori su una versione vecchia di excel dovresti avere a disposizione l' oggetto "FileSearch", che e' in grado di cercare anche nelle subdirectories:
Codice: Seleziona tutto
SourceDir = ThisWorkbook.Path
Set fs = Application.FileSearch
With fs
    .LookIn = SourceDir
    .SearchSubFolders = True
    .Filename = "*.xls?"
    If .Execute() > 0 Then
        MsgBox "Ho trovato " & .FoundFiles.Count & " file(s) "   
        For I = 1 To .FoundFiles.Count   '<< 1) Qui esamini i file uno a uno 
            myFile = .FoundFiles(I)      '<< 2) vedi testo
'Qui le istruzioni dalla tua macro da "if myFile"  "nextF:"     <<<<<
            If myFile = ThisWorkbook.FullName Then GoTo nextF   '<< 3 Vedi testo
            Workbooks.Open (myFile)                             '<< 4
'
'       QUI CI VA IL TUO LOOP PER CARICARE LA MATRICE
'
'
nextF:
        Next I
    Else
        MsgBox ("Nessun file trovato in " & SourceDir)
    End If
End With

Fino alla riga << 1 cerchiamo i file; nella riga << 2 ognuno dei nomi file viene caricato in myFile per il "trattamento" successivo.
C' e' una differenza tra il myFile cosi' calcolato e il quello calcolato nella tua vecchia macro, in quanto ora myFile contiene sia il percorso che il nome file.
Di conseguenza, nelle istruzioni che vanno copiate dalla tua macro a questa (inserendole dopo la riga marcata <<<<), ci sono due differenze gia' riportate nelle righe marcate << 3 e << 4
-la riga marcata << 3 usa FullName invece che Name
-la riga marcata << 4 usa myFile invece che myDir & myFile

Quanto all' errore "Tipo non corrispondente" va evitato assicurando la coerenza delle informazioni; purtroppo dall' esempio non mi sono fatto un' idea di quale incoerenza venga rilevata, quindi non so dire di piu'.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: CARICARE DATI DA SOTTODIRECTORY

Postdi cd7019 » 12/02/14 15:40

Grazie mille.

l'esempio dell'errore era generale, cioeè se avessi un errore di questo tipo devo fare...

c'è un modo di identificare l'errore?
perchè con COD(i,j)>0 non risolvo il problema.


grazie
EXCEL 2003
cd7019
Utente Senior
 
Post: 232
Iscritto il: 26/06/12 21:38

Re: CARICARE DATI DA SOTTODIRECTORY

Postdi Anthony47 » 12/02/14 16:03

Per gestire un errore devi inserire una linea del tipo
Codice: Seleziona tutto
On error goto GestErr


Poi devi inserire il codice di gestione, tipicamente in coda alla macro, che inizia con l' etichetta GestErr: e contiene quanto serve per analizzare il tipo di errore, la fase in cui si e' verificato, le possibili azioni.
Ovviamente e' sempre meglio cercare di anticipare gli errori, eseguendo a priori i controlli piu' apportuni; ad esempio se usi il contenuto di una cella (che quindi dovrebbe essere numerico) come indice in una matrice, potrebbe essere utile controllare tale contenuto, prima del suo uso, per essere certi che sia numerico (uso di IsNumeric) e che sia compreso tra UBound e LBound della matrice. Ma e' solo un esempio...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "CARICARE DATI DA SOTTODIRECTORY":


Chi c’è in linea

Visitano il forum: Nessuno e 45 ospiti