Risolto Esportare fogli su un nuovo file excel in stessa cartella di rete

ghigo15

Nuovo utente
1 Dicembre 2016
11
1
Turin
Excel 2007/2013
0
Ciao a tutti!!

Avrei bisogno di creare una macro VBA che mi permetta di fare quanto segue:

  1. Dati X fogli da me indicati (in questo esempio Minni e Pluto), esportarli automaticamente in un nuovo file excel presente nello stesso percorso dove è salvato quello di origine;
  2. Nel nuovo file appena creato, selezionare tutti i dati presenti nel foglio "Pluto" e incollarli come valori, salvare e chiudere il file
Ho creato una macro VBA (già presente nel file), e vorrei chiedervi lumi sulla robustezza di quanto scritto. Inoltre gradirei sapere come fare in automatico l'incolla valori per il foglio "Pluto", prima del salvataggio e chiusura del file.

Avrei alcuni dubbi su quanto fatto, e chiederei il vostro prezioso aiuto:
  • Se ho differenti file excel contemporaneamente aperti, la macro esegue l'istruzione sul file excel in corso di utilizzo? Se no, come va modificata l'istruzione?
  • L'istruzione funziona nel caso in cui il file è archiviato in rete server, tipo aziendale? O funziona solo se archiviato in locale (intendo su pc)?
  • Nel caso in cui, il file di destinazione (in questo caso "Prova_2020-08-01.xls") fosse già esistente, me lo sovrascrive, corretto?
  • Nel caso in cui, per un qualsiasi motivo, il file di destinazione (in questo caso "Prova2020.08.01.xls") fosse già in uso da un altro utente (perché in rete), come faccio ad evitare di sovrascrivere il file esistente ovvero di creare un nuovo file?
Grazie per il vostro supporto!!


Visual Basic:
Sub Esporta()

Dim myArray

Dim sPath As String, nome As String

Dim v As Variant

v = Split(ThisWorkbook.Name, ".")

nome = v(0)

    sPath = ActiveWorkbook.Path
      
        myArray = Array("Minni", "Pluto")
        Sheets(myArray).Copy
  
      
ActiveWorkbook.SaveAs Filename:=sPath & "\" & nome & Format(Date, "yyyy.mm.dd") & ".xlsx", FileFormat:= _
   xlOpenXMLWorkbook, CreateBackup:=False

ActiveWorkbook.Close

    MsgBox "File esportato in cartella di rete!", vbInformation, "Notifica"

End Sub
 

Allegati

Andrea Guerri

Utente abituale
19 Febbraio 2019
847
45
2019 + G Sheet
35
Sai che puoi risolvere alcuni passaggi anche con il registratore di macro? adesso ci do un'occhiata
 

ghigo15

Nuovo utente
1 Dicembre 2016
11
1
Turin
Excel 2007/2013
0
primo, basta semplicemente per il nome
nome = ActiveWorkbook.Name
Ciao Andrea,
grazie per la risposta e il supporto!

Avevo provato questa soluzione, ma così facendo mi estrae anche l'estensione del file (.xlsm) e me la riporta nel nome del nuovo file, e non mi piaceva...

Per questo motivo ho optato per la soluzione con lo split
 

Andrea Guerri

Utente abituale
19 Febbraio 2019
847
45
2019 + G Sheet
35
Visual Basic:
v = Split(ThisWorkbook.Name, ".")

fileO = v(0)

sPath = ActiveWorkbook.Path

verFile = False

nome = ActiveWorkbook.Path & "\" & fileO & Format(Date, "yyyy.mm.dd") & ".xlsx"

           verFile = Dir(ThisWorkbook.Path & "\" & fileO & Format(Date, "yyyy.mm.dd") & ".xlsx") = ""

If verFile = False Then Exit Sub

Sheets("Minni").Select
Cells.Select
    Selection.Copy
    Workbooks.Add
fileD = ActiveWorkbook.Name
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets(1).Name = "Minni"
    Windows(fileO).Activate
    
    Sheets("Pluto").Select
        Cells.Select
            Selection.Copy
                Range("A1").Select

    Windows(fileD).Activate
        Sheets.Add After:=ActiveSheet
        
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Sheets(2).Name = "Pluto"

Range("A1").Select

ActiveWorkbook.SaveAs Filename:=nome
ActiveWorkbook.Close

    Application.CutCopyMode = False
    Sheets(1).Select

    MsgBox "File esportato in cartella di rete!", vbInformation, "Notifica"
In pratica controlla prima di creare il file se esiste già, se non esiste crea una copia dei dati (senza formattazione) per ogni singolo foglio
 

Andrea Guerri

Utente abituale
19 Febbraio 2019
847
45
2019 + G Sheet
35
Per il discorso rete, io preferisco GSheets nasce nel web ed è più facile da lavorare, non solo per la rete...
Cmq non cambia, otterrai lo stesso indirizzo tipo X:\ ecc ecc
 

Zer0Kelvin

VBA Expert
Staff
19 Novembre 2016
1.933
115
60
Teramo (Provincia)
2010
157
Salve a tutti.
Puoi modificare così la tua macro
Visual Basic:
Sub Esporta_2()

    Dim sPath As String, Nome As String, wName As String
    Dim v As Variant
    Dim I As Long

    v = Split(ThisWorkbook.Name, ".")
    Nome = v(0)
    sPath = ThisWorkbook.Path
    Sheets(Array("Minni", "Pluto")).Copy
    With ActiveWorkbook
        .Sheets("Pluto").UsedRange.Copy 'copia tutte le celle utilizzate nel foglio
        .Sheets("Pluto").UsedRange.PasteSpecial xlPasteValues 'incolla come valore
        wName = sPath & "\" & Nome & Format(Date, "yyyy.mm.dd") & ".xlsx"
        I = 1
        Do While Dir(wName, vbNormal) <> "" 'controlla se esiste un file con questo nome
            ' se esiste aggiunge un indice progressivo (001, 002 ecc) al nome del file
            wName = sPath & "\" & Nome & Format(Date, "yyyy.mm.dd") & Format(I, " - 000") & ".xlsx"
            I = I + 1
        Loop
        .SaveAs Filename:=wName, FileFormat:=xlOpenXMLWorkbook
        .Close False
    End With
    MsgBox "File esportato in cartella di rete!", vbInformation, "Notifica"

End Sub
Riguardo ai percorsi di rete locale, per Windows è indifferente che il file si trovi su una unità locale o di rete.
Naturalmente bisogna impostare il percorso corretto.
 
  • Like
Reactions: ghigo15

ghigo15

Nuovo utente
1 Dicembre 2016
11
1
Turin
Excel 2007/2013
0
Grazie mille! Era proprio quello che mi serviva! Proverò nella rete aziendale e vedrò se funziona!

Se il file originale è salvato nella rete aziendale, mi aspetto che la copia venga salvata in automatico nella stessa cartella, no?

Thanks!
 

Andrea Guerri

Utente abituale
19 Febbraio 2019
847
45
2019 + G Sheet
35
Ciao Zer0Kelvin!

Ho provato e funziona perfettamente, thanks!
Si può fare un piccolo update, ovvero l'utente (tramite magari una finestra pop-up) seleziona quali fogli esportare in un altro file excel? E' molto complicato?

Grazie per un feedback
Ti ho sistemato il file con l'opzione di esportazione con la scelta del foglio, ma la macro progrettata Zer0Kelvin @Zer0Kelvin non esporta i dati come semplici valori ma mantiene la formattazione
 

Andrea Guerri

Utente abituale
19 Febbraio 2019
847
45
2019 + G Sheet
35
Quindi questo è con una leggera modifica al file che ti ha dato Zer0Kelvin @Zer0Kelvin , Saluto_saluto
se hai più fogli da esportare ti conviene usare però un'altro metodo per caricare i nomi dei fogli
 

Allegati

Andrea Guerri

Utente abituale
19 Febbraio 2019
847
45
2019 + G Sheet
35
Ciao Zer0Kelvin!

Ho provato e funziona perfettamente, thanks!
Si può fare un piccolo update, ovvero l'utente (tramite magari una finestra pop-up) seleziona quali fogli esportare in un altro file excel? E' molto complicato?

Grazie per un feedback
Visual Basic:
v = Split(ThisWorkbook.Name, ".")

fileO = v(0)

sPath = ActiveWorkbook.Path

verFile = False

nome = ActiveWorkbook.Path & "\" & fileO & Format(Date, "yyyy.mm.dd") & ".xlsx"

           verFile = Dir(ThisWorkbook.Path & "\" & fileO & Format(Date, "yyyy.mm.dd") & ".xlsx") = ""

If verFile = False Then Exit Sub

Sheets("Minni").Select
Cells.Select
    Selection.Copy
    Workbooks.Add
fileD = ActiveWorkbook.Name
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets(1).Name = "Minni"
    Windows(fileO).Activate
    
    Sheets("Pluto").Select
        Cells.Select
            Selection.Copy
                Range("A1").Select

    Windows(fileD).Activate
        Sheets.Add After:=ActiveSheet
        
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Sheets(2).Name = "Pluto"

Range("A1").Select

ActiveWorkbook.SaveAs Filename:=nome
ActiveWorkbook.Close

    Application.CutCopyMode = False
    Sheets(1).Select

    MsgBox "File esportato in cartella di rete!", vbInformation, "Notifica"
Questo funziona al 100% ti copia e incolla i dati senza formattazione
 

ghigo15

Nuovo utente
1 Dicembre 2016
11
1
Turin
Excel 2007/2013
0
Ok chiaro grazie, quindi questo esporta solo un foglio alla volta..
Invece per esportare più fogli, bisogna necessariamente rivedere il codice!

Grazie per il supporto!
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!