Cercare e aprire file xls
Hai un problema con Excel? 
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
|
Vuoi Approfondire?