Cercare e aprire file xls



  • Cercare e aprire file .xls
    di Frank87 (utente non iscritto) data: 01/09/2010

    Ciao, sono un novello in vb e anche se sono un perito meccanico lavoro molto su excel, ed ho scoperto il fantastico "mondo delle macro". ne ho già fatte alcune molto semplici (con l'aiuto di colleghi e internet), ma ora ho un problema e non riesco a trovare nessuna informazione a riguardo.

    ho un file .xls dove in colonna a ho una serie di codici che sono il nome di altri file .xls che si trovano in una cartella sul mio disco c. vorrei che la macro prendesse il codice in a1, lo cerchi nella cartella e apra il file .xls corrispondente; dopodichè passa al codice in a2 stessa cosa e cosi via.

    vi ringrazio anticipatamente.

    saluti frenk



  • di Enzo (utente non iscritto) data: 02/09/2010

    Copia questa macro nel file dove hai i nomi dei tuoi file
    devi sostituire la cartella che nell'esempio ho chiamato prova con la tua cartella
    fa sapere

     
    Application.ScreenUpdating = False
    CONTA = Application.WorksheetFunction.CountA(Range("A1:A65000"))
    FILE = ActiveWorkbook.Name
    For I = 1 To CONTA
    Workbooks.Open Filename:="C:PROVA" & Range("A" & I) & ".XLS"
    Windows(FILE).Activate
    Next I
    Application.ScreenUpdating = True


  • Risp
    di Frenk87 (utente non iscritto) data: 02/09/2010

    Perfetto, grazie mille.

    ora provo a sistemarla per quello che serve a me, perchè i file che apre, mi servono per incollare delle righe sotto al nome della cartella che si trova sul file .xls in colonna "a" da cui lancio la macro.

    thanks



  • di Enzo (utente non iscritto) data: 02/09/2010

    Se hai problemi fa sapere


  • Risp
    di Frenk87 (utente non iscritto) data: 02/09/2010

    Ciao,

    grazie ancora per l'aiuto;

    avrei un'altra domanda:
    dopo che la macro apre il primo file dalla cartella prova io inizio un "ciclo for" (il ciclo for mi serve per selezionare più righe che poi sono da copiare sull'altro file .xls) sul file.xls che mi ha aperto, pero' non riesco ad attivare la cartella di lavoro, cioè il "ciclo for" me lo esegue sul file da dove lancio la macro.

    windows(range("a" & x) & ".xls").activate

    è il comando che uso per attivare la cartella di lavoro. la variabile "file" che te avevi messo "file = activeworkbook.name" mi cambia anche nome, pero' la macro lavora sempre sul file di inizio.

    non so se mi sono spiegato



  • di Enzo (utente non iscritto) data: 02/09/2010

    No, prova ad allegare un file di esempio e poi vediamo


  • Risp
    di Frenk87 (utente non iscritto) data: 02/09/2010

    Spero che ora si capisca...grazie ancora per l'attenzione


  • Fatto
    di Frenk87 (utente non iscritto) data: 02/09/2010

    Enzo,

    ci sono riuscito, di seguito ti riporto il testo vb.

    sicuramente la troverai un po' macchinosa come scrittura ma è stato il massimo che sono riuscito a fare.

    grazie tante
     
    Sub prova()
    
     Application.ScreenUpdating = False
    FILE = ActiveWorkbook.Name
    For I = 1 To 100
       If Range("a" & I).Text > "" Then
          Workbooks.Open Filename:="C:PROVA" & Range("B" & I) & ".XLS"
          For x = 1 To 100
              If Range("b" & x).Text = "" Then
                 fine_distinta = x - 1
                 Rows("1:" & fine_distinta).Select
                 Selection.Copy
                 Exit For
    
               End If
           Next x
    
    Windows(FILE).Activate
    Range("A" & I + 1).Select
    Selection.Insert Shift:=xlDown
    Application.DisplayAlerts = False
    Windows(Range("B" & I) & ".XLS").Close
    ThisWorkbook.Saved = True
    
    
     Else
    
     End If
    Next I
    Application.ScreenUpdating = True
    
    End Sub



  • di Enzo (utente non iscritto) data: 03/09/2010

    L'importante e' che tu sia riuscito ad ottenere quello che volevi.
    ciao


  • Risp
    di Frenk87 (utente non iscritto) data: 06/09/2010

    Buongiorno,

    come detto la macro è finita e funge a meravigla (grazie al tuo aiuto), ma sto cercando di renderla sempre più completa.

    mi servirebbe di sapere come faccio a dirgli " guarda il codice in a1, se lo trovi in cartella c:prova mettimi un x in b1".

    non so quale è il codice per dire "cerca nella directory"

    ciao francesco



  • di Enzo (utente non iscritto) data: 06/09/2010

    Presumo che vuello che in a1 cerchi nella directory sia il nome del file
    ora l'istruzione qui sotto ricerca nella directory prova i nomi dei file che tu hai nella colonna a a1,a2 etc
    se trova corrispondenza con i nomi dei file nella directory prova ti inserisce in b1 "ok"
    devi adattarla e fa sapere se ti puo' andar bene

     
    On Error Resume Next
    Set fs = Application.FileSearch
    With fs
        .LookIn = "C:PROVA"
        .Filename = "*.XLS"
        If .Execute() > 0 Then
            For i = 1 To .FoundFiles.Count ' inizia il ciclo per iil numero dei file trovati
                DIREC = "C:PROVA" & ""
                MyFileFound = .FoundFiles(i)
                If MyFileFound <> MyFile Then
                FILE = Application.WorksheetFunction.Substitute(MyFileFound, DIREC, "")
                CONTASE = Application.WorksheetFunction.CountIf(Range("A1:A65000"), FILE)
                If CONTASE <> 0 Then
                If Range("A1").Value = FILE Then
                Range("B1").Value = "OK"
                Else
                Range("A1").Select
                Do
                ActiveCell.Offset(1).Select
                Loop Until ActiveCell.Value = FILE
                ActiveCell.Offset(0, 1).Select
                ActiveCell.Value = "OK"
                End If
                          End If
                End If
            Next
        End If
    End With
    


  • Risp
    di Frenk87 (utente non iscritto) data: 06/09/2010

    Ho fatto delle piccole modifiche per adattarla a fare quello che mi serve.

    ho già provato a farla lavorare tutta intera e devo dire che mi sono rispoarmiato un bel po' di tempo e sopratutto fatica.

    grazie mille



  • di Enzo (utente non iscritto) data: 07/09/2010

    Meglio cosi'
    bye


  • Risp
    di Frenk87 (utente non iscritto) data: 10/09/2010

    Ciao,

    sto ancora affinando la macro.

    non riesco pero' a fargli fare una cosa.

    con la funzione cells.find io trovo il mio codice su un'altro foglio .xls . a questo punto voglio far partire un ciclo for dalla cella che mi ha trovato, come faccio

    for ???? to 200

    che cosa ci metto al posto dei "???" ?



  • di Enzo (utente non iscritto) data: 13/09/2010

    Il ciclo deve partire e analizzare tutte le celle successive a quella dove ti sei posizionato?
    se cosi' devi cercare di contare le celle successive non tanto il valore iniziale del ciclo for ...next
    prova



  • di Enzo (utente non iscritto) data: 13/09/2010

    Forse qualcosa ho capito
    allora ipotizza una colonna esempio a dove hai dei valori
    tu cerchi un valore e ti posizioni in una cella
    ora subentra x= activecell.address ossia attribuisci a x il riferimento della cella (es. se hai trovato il valore in a8 x sara' a8
    ora lui attribuisce a y un contatore di celle da a1 a x ed a yy un contatore da x a tutte le celle della colonna (200 prendendo il tuo esempio)
    quindi inizia il ciclo for next
    fa sapere se ' chiaro ma lo devi adattare alle tue esigenze

     
    X = ActiveCell.Address
    YY = Application.WorksheetFunction.CountA(Range(X & ":A65000"))
    Y = Application.WorksheetFunction.CountA(Range("A1:" & X))
    For I = Y To YY
    ......
    Next i
    



  • di Enzo (utente non iscritto) data: 13/09/2010

    Mi sono accorto di un errore e' questa l'istruzione esatta
     
    X = ActiveCell.Address
    yy = Application.WorksheetFunction.CountA(Range(X & ":A65000"))
    y = Application.WorksheetFunction.CountA(Range("A1:" & X))
    For i = y To yy + y - 1
    .....
    Next i