È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Copiare foglio con VBA

Ultimo Aggiornamento: 16/08/2022 14:59
Post: 361
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Senior
2010
OFFLINE
10/08/2022 19:54

Buon Agosto a tutti.
Sarà l'aria di montagna o solo il tempo che passa ma non riesco a fare una cosa cosi semplice 🤬
Vorrei "semplicemente" avere una macro che copia l'intero e unico foglio (Sheet) presente in FileSorgente nel foglio Sheet presente nel file destinazione.

Grazie in anticipo.
[Modificato da BG66 10/08/2022 19:54]
BG66
Excel 2010
Post: 1.526
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
10/08/2022 22:42

Ciao,
soluzione più semplice e veloce?

Usa il registratore di macro!😉
Ciao
Frank









Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 1.009
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Veteran
Excel2019
OFFLINE
11/08/2022 06:37

Ciao
In aggiunta a quanto suggerito da @tanimon (ciao Frank), se ho capito cosa vuoi fare:
a) seleziona la freccetta che c'è nell'angolo in alto a sinistra del FoglioSorgente, tasto destro e seleziona Copia
b) seleziona la cella A1 del FoglioDestinazione, tasto destro e incolla.

Ciao,
Mario
Post: 361
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Senior
2010
OFFLINE
11/08/2022 06:43

Ciao Tanimon,
avevo escluso il registratore perche mi "costringe" ad aprire entrambi i files.
Mentre il codice del mitico Ennius
Sub CopiaFoglioEnnius()
X = "C:\Users\DirStab\Desktop\Lavori & Prove\DashBoard Corsi\FileSorgente.xlsx" 'con X prendiamo tutto il percorso che mira alla cartella chiusa
Workbooks.Open Filename:=X, ReadOnly:=False   'apriamo la cartella di origine
Y = Mid(X, 13)  'con Y otteniamo, estratto con Mid, solo il nome della cartella di origine
Workbooks(Y).Sheets("Sheet").Copy _
After:=Workbooks("FileDestinazione.xlsm").Sheets("Sheet") 'usiamo quindi Y al posto del nome della cartella

Workbooks(Y).Close  ' e quindi si chiude la cartella Y (la cartella di origine)
End Sub 

mi andava in errore e da questo nasceva l'apertura del post ripartendo da zero.


[Modificato da BG66 11/08/2022 06:44]
BG66
Excel 2010
Post: 362
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Senior
2010
OFFLINE
11/08/2022 06:51

Ciao Mario,
avevo fatto anche quello ma all'apertura del file destinazione cliccando su aggiorna non succede nulla.
BG66
Excel 2010
Post: 6.928
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
11/08/2022 07:50

Ciao Prova questa macro da inserire nel file di destinazione

Sub Trascrivi()
Dim Ind, file, sh1 As Worksheet

Application.DisplayAlerts = False
Set sh1 = Worksheets("Sheet") 'nome del foglio destinazione
file = "FileSorgente.xlsx" 'nome del file sorgente
sh1.Range("A1").CurrentRegion.Clear
Ind = ActiveWorkbook.Path & "/" & file
Workbooks.Open Filename:=file, UpdateLinks:=3
Range("A1").CurrentRegion.Copy sh1.Range("A1")
ActiveWorkbook.Close
Application.DisplayAlerts = True
sh1.Activate
End Sub


cancella il foglio di destinazione e scrive i dati dal foglio sorgente, ma attenzione il foglio sorgente deve contenere solo il foglio da copiare

inoltre i 2 file devono stare nella stessa cartella oppure insieme sul desktop.

Ciao By Sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 363
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Senior
2010
OFFLINE
11/08/2022 09:39

Ciao By Sal,
ottengo medesimo errore sia con i due files sul desktop che nella stessa cartella.

BG66
Excel 2010
Post: 6.929
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
11/08/2022 09:54

Ciao BG ma i tuoi 2 file come si chiamano, il file destinazione non è importante ma il file sorgente si deve essere uguale

file = "FileSorgente.xlsx" 'nome del file sorgente


anche l'estensione, ti faccio un esempio con i tuoi 2 file



e ti allego anche i tuoi 2 file con la macro

Ciao By Sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 6.930
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
11/08/2022 10:00

Hoops dimenticavo, il file sorgente deve essere chiuso ed inoltre ha più fogli, altrimenti devo dargli il nome del foglio, se ne contiene 1 va bene, e non dovrebbe comparire la finestra per l'aggiornamento dei collegamenti, perche l'ho disabilitata con vba.

al limite il nome del file sorgente potrebbe anche essere messo in una cella nel file destinazione, in modo da non correggere la macro ogni volta che cambia nome, si cambia solo nella cella.

Ciao By Sal (8-D

se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 51
Registrato il: 18/10/2016
Città: COSENZA
Età: 65
Utente Junior
Excel 2007
OFFLINE
15/08/2022 11:41

BG66 Copia foglio con VBA
Prova.....
A me funziona.

Sub CopiaFoglio()
On Error Resume Next
Dim sht As Worksheet
Dim dest As Worksheet
Set sht = ActiveSheet
destinazione = InputBox("Nome Cartella,Foglio destinazione: es: Cartella,Foglio")
If Len(destinazione) = 0 Then Exit Sub
mat = Split(destinazione, ",")
If UBound(mat) < 1 Then Exit Sub
cartella = mat(0)
foglio = mat(1)
Set dest = Workbooks(cartella).Sheets(foglio)
If dest Is Nothing Then
percorso = ThisWorkbook.Path & 2 \ " & cartella"
test = Dir(percorso, vbArchive)
If Len(test) = 0 Then Exit Sub
Set wb = Workbooks.Open(percorso)
bsht = False
For Each sh In wb.Worksheets
If UCase(sh.Name) = UCase(foglio) Then
bsht = True
Exit For
End If
Next sh
If btrue = False Then Exit Sub
Set dest = Workbooks(cartella).Sheets(foglio)
End If
Set target = dest.Cells(1, 1)
sht.UsedRange.Copy Destination:=target 'intero range utilizzato nel foglio
'in alernativa sht.[a1]].currenregion.copy per la tabella che nasce in a1
esci:
sht.Cells(1, 1).Select 'deseleziona la selezione copy
End Sub



Post: 3.337
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
16/08/2022 10:25

ciao BG

il codice di Salvatore (saluti) va leggermente modificato così, tenendo presente che Sorgente e Destinazione debbano risiedere nella medesima cartella;

Il codice va inserito nel file di destinazione:
Sub Trascrivi()
Dim file, sh1 As Worksheet
Application.DisplayAlerts = False
Set sh1 = Worksheets("Sheet") 'nome del foglio destinazione
file = ActiveWorkbook.Path & "\FileSorgente.xlsx" 'nome del file sorgente
sh1.Range("A1").CurrentRegion.Clear
Workbooks.Open Filename:=file, UpdateLinks:=3
Range("A1").CurrentRegion.Copy sh1.Range("A1")
ActiveWorkbook.Close
Application.DisplayAlerts = True
sh1.Activate
End Sub


Entrambi avete ignorato la variabile Ind che avrebbe contenuto il nome del file con la path completa.
Ma nel suddetto modo, è inutile utilizzarla.

Quanto sopra presuppone che tu ogni volta debba copiare il sorgente, eliminando quanto presente in Destinazione.

Sorgente deve essere chiuso nel momento di esecuzione della macro, altrimenti bisogna variare il codice.

saluti




[Modificato da dodo47 16/08/2022 10:27]
Domenico
Win 10 - Excel 2016
Post: 6.938
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
16/08/2022 14:59

Ciao Domenico, ricambio i saluti, l'avevo fatto il quel modo, solamente perche fosse possibile fare riferimento ad una cella del foglio destinazione inserendo il nome del file sorgente per non intervenire nella macro.


File = Range("A1")



Ciao By Sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Vota: 15MediaObject5,00112 1
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 02:59. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com