Copiare e salvare più fogli di lavoro in
una nuova cartella.
-
pagina vista: volte
In molte occasioni
abbiamo necessità di salvare un solo foglio di lavoro della cartella attiva,
creando una nuova cartella che conterrà solo il foglio salvato.
Il metodo più
semplice è sfruttare il metodo Copy, indicando il nome del foglio che
intendiamo salvare, (o duplicare) in una nuova cartella.
Sheets("Nome del foglio").Copy |
Una volta copiato
il foglio, è necessario usare il metodo SaveAs , indicando il
percorso completo ed il nome che la nuova cartella dovrà avere. Potremo
prelevare questo nome anche da una cella che contenga un dato adatto a
fornire il nome della nuova cartella, ma forse è consigliabile richiamare la
finestra "Salva con nome" di Windows, sceglieremo in questa finestra il
percorso ed il nome da assegnare:
Sheets("Fatture").Copy
'indichiamo il nome del foglio da copiare/salvare
Application.Dialogs(xlDialogSaveAs).Show
'apriamo la finestra "Salva con nome". Dopo che avremo assegnato il nome
e 'selezionata la cartella di destinazione, premeremo il pulsante
"Salva" |
Ma se invece di un solo foglio, vogliamo copiare in contemporanea più fogli
di una stessa cartella? possiamo usare un Array (una matrice) indicando,
come elementi che compongono la matrice, i nomi dei fogli che intendiamo
copiare, e quindi usare il metodo Copy applicato alla matrice:
fogli = Array("fogliouno", "Database", "fatture")
'alla la variabile "fogli" assegniamo
la matrice contenente i nomi
Sheets(fogli).Copy
Application.Dialogs(xlDialogSaveAs).Show |
Nel caso invece che si debbano creare condizioni di valutazione per decidere
quali fogli copiare (creando quindi un automatismo), dovremo usare un ciclo
che, scorrendo tutti i fogli della cartella attiva, verifichi la condizione
da definire ed assegni ad una matrice solo il nome dei fogli che
corrispondono al criterio. Anche in questo caso useremo poi il metodo Copy
applicato ai nomi in matrice.
Simuliamo quindi di voler copiare in una nuova cartella, solo i fogli in cui
in una determinata cella (la stessa per tutti i fogli) compaia un numero
positivo, usiamo la cella A1 come esempio; questa la routine (risolta con
l'aiuto di Mike):
Sub CopiaFoglioSe()
Dim Ws As Worksheet
Dim iFogli() As String
Dim A
A = 1 'si inizializa a 1 il contatore
che corrisponderà all'indice di matrice
For Each Ws In Worksheets
'per ogni foglio dell'insieme fogli
If Ws.[A1].Value > 0 Then
'se il valore nella cella A1 è un numero maggiore
di zero
ReDim Preserve iFogli(1 To A) 'modifichiamo
il contenuto della matrice aggiungendo un elemento, preservando (Preserve)
'l'eventuale contenuto precedente
iFogli(A) = Ws.Name ' e quindi si
assegna il nome del foglio al numero indice dell'elemento
A = A + 1 'si incrementa di una unità
il contatore
End If
Next
'si passa al foglio successivo
If A = 1 Then Exit Sub 'si verifica che
esistano fogli da copiare, altrimenti usciamo dalla routine
Sheets(iFogli()).Copy 'si
copiano i fogli ora in matrice
Application.Dialogs(xlDialogSaveAs).Show
End Sub |
Ricordiamoci che
la nuova cartella creata e salvata, sarà la cartella attiva in quel momento,
se vorremo chiuderla per ritornare alla cartella da cui sono stati copiati i
fogli, potremo usare a fine routine:
Buon lavoro.
prelevato sul sito
www.ennius.altervista.org
|