Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel 13] Macro che apre, salva e chiude file

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel 13] Macro che apre, salva e chiude file

Postdi Sbarba » 22/04/16 13:00

Buonasera a tutti,

In un file Excel ho un elenco di prodotti del tipo colonna A: codice e colonna B: nome.
Vorrei:
-creare un file per ogni prodotto, partendo da uno di base che contiene delle formule, denominato "codice_nome.xlsx"
-creare una macro che mi apre ogni file, aspetta 30 secondi, lo salva e lo chiude

Per la prima parte sono riuscito a farlo con la seguente macro:

"Sub Crea_File()
Dim UR As Integer, I As Integer, WB1 As Workbook, WS1 As String, Nome_Precedente As String, Nome_Modello As String

Set WB1 = ActiveWorkbook
WS1 = WB1.ActiveSheet.Name
UR = Range("A" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
Nome_Precedente = ActiveWorkbook.Name
Nome_Modello = "File_Base.xlsx"
Workbooks.Open Filename:=Nome_Modello

For I = 2 To UR
ActiveWorkbook.SaveAs Filename:= _
WB1.Sheets(WS1).Cells(I, 1) & "_" & WB1.Sheets(WS1).Cells(I, 2) & ".xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
Next I

ActiveWindow.Close
Windows(Nome_Precedente).Activate

Application.ScreenUpdating = True
MsgBox "Elaborazione Effettura. Creati " & I - 2 & " file"
Set WB1 = Nothing
End Sub"


vorrei, però, che i file creati fossero in formato .xlsx e non .xls. Come devo modificare "FileFormat:="? Ho provato a cambiare solo l'estensione scrivendo ".xlsx" anzichè ".xls" ma poi quando apro il file mi dà errore.

Come posso fare poi per creare la seconda macro? I file si trovano tutti nella stessa cartella e vorrei che avviando la macro si aprissero uno alla volta in modo autonomo, senza che debba selezionarli io, e che poi si salvassero e chiudessero.

Ho provato a cercare sul forum ma date le mie scarse conoscenze non sono riuscito a trovare una soluzione.

Grazie in anticipo :)


EDIT:

Ho trovato questa macro che mi fa aprire il file il cui nome è nella cella A1:

"Public Sub mApriFile()

On Error GoTo RigaErrore

Dim sh As Worksheet
Dim wrk As Workbook
Dim sPath As String
Dim sNomeFile As String
Dim lRisposta As Long

sPath = "C:\cartella\"
Set sh = Worksheets("Foglio1")

With sh

sNomeFile = .Range("A1").Value & ".xls"
lRisposta = MsgBox(Prompt:="Vuoi aprire il file: " _
& sNomeFile, Title:="Attenzione", _
Buttons:=vbYesNo + vbQuestion)

If lRisposta = vbYes Then
Workbooks.Open (sPath & sNomeFile)
End If

End With

RigaChiusura:
Set sh = Nothing
Exit Sub

RigaErrore:
MsgBox Err.Number & vbNewLine & Err.Description
Resume RigaChiusura

End Sub"


E l'ho adattata al mio caso. Vorrei però:
-che non mi chiedesse la conferma prima di aprire il file
-che salvasse e chiudesse il file 30 secondi dopo averlo aperto
-che aprisse tutti i file dell'elenco e non solo il primo

ri-grazie :)
Sbarba
Utente Junior
 
Post: 36
Iscritto il: 07/10/14 15:56

Sponsor
 

Re: [Excel 13] Macro che apre, salva e chiude file

Postdi Sbarba » 22/04/16 16:18

modificando la seconda parte così: (ho spostato il nome del file in c2 per comodità)

"With sh

sNomeFile = .Range("c2").Value & ".xls"
Workbooks.Open (sPath & sNomeFile)

Application.Wait Now + TimeValue("00:00:05")
ActiveWorkbook.Save
ActiveWindow.Close

End With"

sono riuscito ad impostare che il file, 5 secondi dopo essere stato aperto, si chiude. Ho inoltre eliminato la richiesta di conferma prima di aprire un file.

Ora dovrei modificare la prima parte in modo che mi crei i file in formato .xlsx e non .xls e modificare la seconda parte in modo che apra (per forza uno dopo l'altro e non tutti insieme) tutti i file di un elenco e non solo il primo.

Immagino che quanto ho postato sia comunque migliorabile, quindi se qualcuno avesse altre soluzioni sarebbero ovviamente gradite.

Grazie di nuovo :)
Sbarba
Utente Junior
 
Post: 36
Iscritto il: 07/10/14 15:56

Re: [Excel 13] Macro che apre, salva e chiude file

Postdi ricky53 » 23/04/16 00:50

Ciao,
per salvare un file in XLSX devi utilizzare questo parametro
Codice: Seleziona tutto
FileFormat:=xlOpenXMLWorkbook
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel 13] Macro che apre, salva e chiude file

Postdi Anthony47 » 23/04/16 01:05

Vedi il messaggio di Ricky, sopra.

Per la seconda parte della domanda, le cose dipendono molto da cosa in realta' il pc fara' in quei 30 secondi. In linea di massima devi creare una sequenza per eseguire le operazioni su tutto l'elenco di Sh. Io farei cosi':
1-usi due celle libere per memorizzare in una il nome della finestra aperta e in un'atra la riga che hai appena processato
2- pianifichi una macro di OnTime per farla partire dopo 30 secondi; la macro controlla che la cella della "finestra aperta" non sia vuota e chiude il file con salvataggio delle modifiche.
3-la stessa macro di OnTime controlla che la riga successiva non sia vuota, apre il file della riga successiva, pianifica la riesecuzione della stessa macro dopo 30 secondi.

Per iniziare il tutto dovrebbe bastare:
-impostare "riga appena processata = 1"
-cancellare il contenuto del "nome della finestra aperta"
-richiamare la macro di OnTime, che (per quanto detto sopra)
---non chiudera' nessuna finestra
---aprira' il file in riga2
---salva "riga appena processata = 2"
---salva "nome della finestra aperta = ActiveWorkbook.Name
---imposta l'esecuzione OnTime dopo 30 secondi di se stessa

Mi permetto pero' di suggerirti di rianalizzare tutto il processo; se il file che viene aperto va salvato prima di chiuderlo e' perche' qualcuno deve farci delle modifiche: ebbene, se mentre faccio le mie modifiche il file si salva e si chiude da solo io mi inc******i abbastanza. Per questo non ho suggerito nessun codice per la macro di cui ho delineato le caratteristiche.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel 13] Macro che apre, salva e chiude file

Postdi Sbarba » 24/04/16 17:31

Buonasera ad entrambi e grazie per le risposte :)

martedì proverò ad implementare il parametro per salvare i file in .xlsx

Anthony i file che devo aprire e chiudere contengono uno scarico dati, quindi manualmente non devo fare nulla. Devo solo aprirli, aspettare che scarichino i dati e chiuderli.

La macro che ho postato non l'ho scritta io, ho solo adattato pezzi di soluzione trovati con varie ricerche. Io non so scrivere una singola riga di codice, quindi non ho idea di come realizzare quello che mi hai consigliato :)
Sbarba
Utente Junior
 
Post: 36
Iscritto il: 07/10/14 15:56

Re: [Excel 13] Macro che apre, salva e chiude file

Postdi Anthony47 » 25/04/16 20:58

Anthony i file che devo aprire e chiudere contengono uno scarico dati, quindi manualmente non devo fare nulla. Devo solo aprirli, aspettare che scarichino i dati e chiuderli
Questa parte invece di illuminarmi mi confonde, perche' non capisco che cosa intendi tu per "aspettare che scarichino i dati"; puoi dettagliare?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel 13] Macro che apre, salva e chiude file

Postdi Sbarba » 26/04/16 09:19

Anthony47 ha scritto:
Anthony i file che devo aprire e chiudere contengono uno scarico dati, quindi manualmente non devo fare nulla. Devo solo aprirli, aspettare che scarichino i dati e chiuderli
Questa parte invece di illuminarmi mi confonde, perche' non capisco che cosa intendi tu per "aspettare che scarichino i dati"; puoi dettagliare?

Ciao


Non mi sono spiegato molto bene, ti chiedo scusa :)

Questi file scaricano dati da Bloomberg, un software che si usa in ambito finanziario. Io vorrei quindi che la macro apra il primo file dell'elenco, aspetti che termini di scaricare i dati (cosa che avviene in automatico, senza che debba fare nulla manualmente), lo salvi e lo chiuda. Poi la stessa cosa per il secondo file, poi per il terzo e così via.

Mi sono spiegato meglio?
Sbarba
Utente Junior
 
Post: 36
Iscritto il: 07/10/14 15:56

Re: [Excel 13] Macro che apre, salva e chiude file

Postdi Sbarba » 28/04/16 11:37

Nessuno riuscirebbe ad aiutarmi? :neutral:
Sbarba
Utente Junior
 
Post: 36
Iscritto il: 07/10/14 15:56

Re: [Excel 13] Macro che apre, salva e chiude file

Postdi Anthony47 » 28/04/16 22:53

In questi giorni non ho proprio avuto tempo...
Purtroppo per aspettare che i dati siano stati scaricati avrei bisogno di sarere come fa a scaricarli, altrimenti non so che cosa devo aspettare. Ci sono macro in questi file? In quale Modulo sono posizionate? Che nome hanno? Che cosa fanno?
Poi hai parlato di una interazione con un file che usi come "modello", ma non ho capito che tipo di interazione esiste con i file che vanno aperti e quando si attiva.
Insomma una situazione in cui io so il 10% di quello che bisognerebbe sapere per risponedere a ragion veduta...

Nell'ipotesi che basti aprire il "modello", poi il primo file, poi salvare il modello con un altro nome, poi chiudere il primo file aperto; passare al secondo file e ripetere (aprire il modello, aprire il secondo file, salvare il modello con altro nome, etc) allora potrebbe aiutare una macro come questa:
Codice: Seleziona tutto
Sub ScanFiles()
'
Set WB1 = ActiveWorkbook
WS1 = WB1.ActiveSheet.Name
'
For I = 1 To Cells(Rows.Count, 1).End(xlUp).Row
    Nome_Modello = "File_Base.xlsx"
    Workbooks.Open Filename:=Nome_Modello
'
    Workbooks.Open Cells(I, 1).Value
    cwbn = ActiveWorkbook.Name
    DoEvents
    Application.Wait Now + TimeValue("00:00:03")
    Workbooks(Nome_Modello).SaveAs Filename:= _
        WB1.Sheets(WS1).Cells(I, 1) & "_" & WB1.Sheets(WS1).Cells(I, 2) & ".xls", FileFormat:=xlOpenXMLWorkbook, _
        Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
        CreateBackup:=False
    Workbooks(cwbn).Close True
Next I
MsgBox ("Completato...")
End Sub

Presuppone che l'elenco dei file da aprire siano in colonna A, da A1 verso il basso, e che alla loro apertura una qualche macro di WorkBook_Open avvii lo scaricamento di cui parli.

Ovviamente eseguire questa macro se la tua situazione e' diversa da quella che io ho immaginato puo' solo che fare danni.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel 13] Macro che apre, salva e chiude file

Postdi Sbarba » 29/04/16 14:05

Ciao Anthony,

ti ringrazio per la risposta. Nel frattempo ho sviluppato un codice del genere:

Codice: Seleziona tutto
Sub Crea_File()
    Dim UR As Integer, I As Integer, WB1 As Workbook, WS1 As String, Nome_Precedente As String, Nome_Modello As String, sPath As String
   
    sPath = "C:\Users\xxx\"
       
    Set WB1 = ActiveWorkbook
    WS1 = WB1.ActiveSheet.Name
    UR = Range("A" & Rows.Count).End(xlUp).Row
    Application.ScreenUpdating = False
    Nome_Precedente = ActiveWorkbook.Name
    Nome_Modello = "File_Base.xlsx"
    Workbooks.Open (sPath & Nome_Modello)
   
    For I = 2 To UR
        ActiveWorkbook.SaveAs Filename:= _
            sPath & WB1.Sheets(WS1).Cells(I, 1) & "_" & WB1.Sheets(WS1).Cells(I, 2) & ".xlsx", FileFormat:=xlOpenXMLWorkbook, _
            Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
            CreateBackup:=False
    Next I
   
    ActiveWindow.Close
    Windows(Nome_Precedente).Activate
   
    Application.ScreenUpdating = True
    MsgBox "Elaborazione Effettuata.  Creati " & I - 2 & " file"
    Set WB1 = Nothing
End Sub


così mi crea i file partendo da quello di base.

E poi:

Codice: Seleziona tutto
Public Sub mApriFile()

On Error GoTo RigaErrore

    Dim sh As Worksheet
    Dim wrk As Workbook
    Dim sPath As String
    Dim sNomeFile As String
    Dim lRisposta As Long
    Dim uRiga As Long

    uRiga = Range("C" & Rows.Count).End(xlUp).Row

    sPath = "C:\Users\xxx\"
   
    Set sh = Worksheets("Foglio1")

    With sh
    For I = 2 To uRiga
        sNomeFile = .Range("c" & I).Value & ".xlsx"
        Workbooks.Open (sPath & sNomeFile)

        Application.Wait Now + TimeValue("00:00:05")
        ActiveWorkbook.Save
        ActiveWindow.Close
    Next I
    End With

RigaChiusura:
    Set sh = Nothing
    Exit Sub
   
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura

End Sub


così apre il file, aspetta 5 secondi, lo salva e lo chiude. Poi passa al secondo e così via. Per rispondere alla tua domanda i file non contengono macro ma solo scarichi di dati da Bloomberg, che avvengono in automatico una volta che apri il file e ci impiegano pochi secondi.

Immagino che il codice sia sicuramente migliorabile però per il momento funziona. Ora che ho creato queste macro devo adattarle ai file reali per cui le utilizzerò.
Sbarba
Utente Junior
 
Post: 36
Iscritto il: 07/10/14 15:56


Torna a Applicazioni Office Windows


Topic correlati a "[Excel 13] Macro che apre, salva e chiude file":


Chi c’è in linea

Visitano il forum: Nessuno e 17 ospiti