Quote Originariamente inviata da Bilio Visualizza il messaggio
Buongiorno a tutti,ù
premettendo la mia poca conoscenza del VBA, ho da poco imparato a fare dei brevi codice che, comunque, risultano di una efficacia incredibile. Desideravo chiedervi una soluzione o comunque un'indicazione per risolvere un problema:
- ho circa 50 file in excel che devo processare;
- di questi 50 file devo copiare un foglio, nome foglio "VR_Mansione" (nome uguale per tutti e 50 i file);
- i file sono elencati in un file riassuntivo (file di destinazione) e, a partire dalla colonna "b3" del foglio "elencoVR" ho inserito i collegamenti ipertestuali dei file (indirizzi completi dei 50 file che devo processare);
- devo aprire i 50 file, copiare il foglio "VR_Mansione" e chiudere i file;
- tutti i dati dei 50 fogli "VR Mansione" devono essere scritti in un unico foglio del file riassuntivo nominato "tutte".

Ho provato a fare un codice inserendo solo due dei cinquanta file: ecco il codice (che per due soli file funziona)

Sub copia() 'copia tutte le vr mansione presenti su un unico foglio
Dim Riassunto As Workbook
Dim wk1 As Workbook
Dim wk2 As Workbook
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim dest1 As Worksheet
Dim N1, N2, As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Riassunto = ThisWorkbook

N1 = Riassunto.Worksheets("elencoVR").Range("B3").Value 'l'indirizzo lo prendo dall'elenco del primo foglio colonna "b"
N2 = Riassunto.Worksheets("elencoVR").Range("B4").Value

Set wk1 = Workbooks.Open(N1)
Set wk2 = Workbooks.Open(N2)

Set dest1 = Riassunto.Worksheets("Tutte") 'è il foglio di destinazione del file riassuntivo

Set sh1 = wk1.Worksheets("VR_Mansione")
Set sh2 = wk2.Worksheets("VR_Mansione")

With sh1
.Range("f4:M150").Copy Destination:=dest1.Range("a4")
.Range("o4:z150").Copy Destination:=dest1.Range("j4")
End With
wk1.Close

With sh2
.Range("f4:M150").Copy Destination:=dest1.Range("a154")
.Range("o4:z150").Copy Destination:=dest1.Range("j154")
End With
wk2.Close

Application.ScreenUpdating = True

End Sub

Tutti funziona ma, ovviamente, non so come continuare. Teoricamente se i file fossero sempre tutti e 50 presenti ed elencati potrei aggiungere (con pazienza) tutte le istruzioni necessarie. Il problema è che i file sono di numero variabile e, quindi, spesso nella colonna "B" dell'elenco dei file non c'è quindi scritto niente. In questa situazione il codice non funziona.
Andrebbe bene anche indicarmi una metodologia per procedere e poi passerei un po' di tempo a studiarci su nonostante l'età avanzata.
Grazie.
PS: VBA è veramente utilissimo e fenomenale.
Ciao
Non ha senso scrivere 50 volte le stesse istruzioni.. per questo esistono i cicli.
Guardati degli esempi di istruzioni Do Loop o For Next..
Sono fatti apposta per risolvere situazioni come queste...
Direi che devi fare un ciclo che legge l'indirizzo del file VR_Mansione, apre il file estrae i dati e te li incolla dove vuoi tu e poi ripeti..
Guardati anche la sintassi dell'istruzione cells(row,column) che ti permette di accedere ai valori delle celle passandogli coordinate riga/colonna, un po come battaglia navale!