› Sviluppare funzionalita su Microsoft Office con VBA › Salvare Fogli + Rename su un altro file
-
AutoreArticoli
-

Ti aspetto 🙂
un piccolo suggerimento....
sto lavorando sul comando SaveAs.
ActiveWorkbook.SaveAs Filename:=perc1 & NuovoFile1la mia idea è: se questa riga dice dove salvare (perc1) e il nome del file (NuovoFile1), perchè non basta sostituire "perc1" con la variabile con l'indirizzo della nuova path (che ho chiamato "cartella")???
il problema potrebbe essere l'indentatura? la prima parte della macro deve essere più a sinistra rispetto alla seconda e quindi i due salvataggi dei file nella directory devono essere indentati a dx rispetto ai comandi di creazione cartella?? ha senso mettermi a lavorare su questa ipotesi?
oppure....
perc1 = ActiveWorkbook.Path & "\" percorso1 = perc1 & "DIFOT.xlsx" Workbooks.Open percorsoè qui che non gli piace....
gaaaazieeee
perchè non basta sostituire
Certo che dovrebbe bastare 🙂
il problema potrebbe essere l'indentatura?
No. Non stai sviluppando in python (che è l'unico linguaggio che io conosca a pretendere l'indentazione come parte della sintassi: se non indenti correttamente il programma fallisce). In VBA è indifferente agli spazi tra parole chiave e istruzioni (solo se poni due istruzioni sulla stessa riga devi utilizzare il separatore due punti ":").
Fai solo attenzione che tra il percorso e il nome del file deve esserci uno slash:
if right$(cartella, 1) <> "\" then cartella = cartella & "\" ActiveWorkbook.SaveAs Filename:=cartella & nomefileIn realtà non è tecnicamente corretto neanche fare così perchè questo vale in Windows ma non in altri sistemi dove il separatore delle directory è diverso (ecco perchè nel modello a oggetti di Excel trovi Application.PathSeparator). Ma l'idea è resa 🙂
E se il problema non è neanche questo, illustra con un esempio pratico dove il problema sia riproducibile 😉
oppure....
Non vale modificarmi i post mentre li sto leggendo 😀
è qui che non gli piace....
L'istruzione è corretta. Allora qualcosa non esiste: o il percorso, o il nome del file.
ce l'ho FAAAAATTAAAAA!!!!!
ActiveWorkbook.SaveAs Filename:=cartella & "\" & NuovoFile1

Ciao Vecchio Frac,
tutto bene? ritorno a te con un problema che sto riscontrando con la macro che mi avevi aiutato a sviluppare.
faccio un breve riassunto, così non devi riprendere tutto.
1) macro che prende un file contenente "n" fogli
2) splitta i fogli e li salva "singolarmente" in un'altra cartella rinominandoli (con il valore di una cella)
3) prende il file di partenza e lo salva nella cartella (questa volta con tutti i fogli) e rinominandolo con la data
4) extra della macro: una barra di avanzamento lavori, una variabile di controllo per l'esistenza o meno della cartella.
Il mio problema riguarda il punto 3) ovvero >>> la macro funziona correttamente, ma SOLO l'ultimo file (che dovrebbe essere un semplice "salva & rename") porta alla creazione di un file che è corrotto: il file è visibile e salvato nella cartella con nome ed estensione giusti, ma quando lo provo ad aprire appare il seguente messaggio:

questa è la porzione di codice che lo genera:
perc1 = ActiveWorkbook.Path & "\" percorso1 = perc1 & "DIFOT.xls" Workbooks.Open percorso NuovoFile1 = "_DIFOT_" & Range("A6").Value & "_" & Format(Date, "dd") & ".xlsx" ActiveWorkbook.SaveAs Filename:=cartella & "\" & NuovoFile1 ActiveWorkbook.Close 'chiude il file appena salvatoho fatto un po' di prove cambiando nome, spazi etc etc... ma non riesco a capire cosa non gli piace.
Potresti darmi una mano?
Grazie mille!!
Ciao
Una domanda: la macro il cui spezzone di codice hai mostrato dove sta?
Mi sembra, ma non avevo seguito il precedente e dal post precedente non lo si capisce, che stai tentando di salvare un file "con macro" come file "senza macro". Mi riferisco in particolare al suffisso che metti nel nuovo file, cioè
NuovoFile1 = "_DIFOT_" & Range("A6").Value & "_" & Format(Date, "dd") & ".xlsx"
Non dovrebbe essere .xlsm?
Ciao,
Mario
Ciao,
non ho ora accesso al codice.
è leggermente diverso, il file che contiene la macro va ad aprire un .xls salvatp nella cartella che deve rinominare (con la data del giorno) e salvare.
sinceramente non è essenziale per me che il file finale sia con macro, ma se questo risove il problema, è un compromesso che posso accettare tranquillamente!
Grazie
Ciao,
questo è il codice:
`Sub SalvaFoglioConNome() Dim perc As String Dim perc1 As String Dim percorso As String Dim percorso1 As String Dim i As Integer Dim n As Integer Dim j As Integer Dim NuovoFile As String Dim NuovoFile1 As String Dim periodo As String Dim cartella As String Application.ScreenUpdating = False Application.DisplayAlerts = False Workbooks.Open "N:\xxxxxdifot.xls" periodo = activeworkbooks & Range("A6").Value cartella = "xxxxx" & periodo If (Len(Dir(cartella, vbDirectory)) > 0) Then MsgBox "Path exists!" ' tutto ok, questa sub ha esaurito il suo compito ' perchè la cartella esiste già Else MsgBox "Path will be created" ' qui creo la cartella MkDir (("N:\xxxxxx & periodo) End If Workbooks("difot.xls").Close perc = ActiveWorkbook.Path & "\" percorso = perc & "DIFOT.xls" Workbooks.Open percorso Load UserForm1 UserForm1.Show vbModeless j = 0 n = ActiveWorkbook.Sheets.Count For i = 1 To ActiveWorkbook.Sheets.Count j = j + 1 With Sheets(i) If .Range("B8") <> "" Then UserForm1.ProgressBar1.Value = (j / n) * 100 'descrizione per l'utente UserForm1.Label1.Caption = "Individual Progress = " & Format((j / n) * 100, "0.00") & "%" 'permette l'esecuzione asincrona con altri eventi Windows DoEvents .Cells.Copy 'copia il foglio Workbooks.Add 'crea un nuovo file ActiveSheet.Paste 'incolla i dati 'rinomina il file e lo salva NuovoFile = "DIFOT " & Range("A3").Value & " - " & Range("A6").Value & ".xlsx" ActiveWorkbook.SaveAs Filename:=cartella & "\" & NuovoFile ActiveWorkbook.Close 'chiude il file appena salvato End If End With ' Sleep 1000 Next i Unload UserForm1 perc1 = ActiveWorkbook.Path & "\" percorso1 = perc1 & "DIFOT.xls" Workbooks.Open percorso NuovoFile1 = "_DIFOT " & Range("A6").Value & " " & Format(Date, "dd") & ".xlsx" ActiveWorkbook.SaveAs Filename:=cartella & "\" & NuovoFile1 ActiveWorkbook.Close 'chiude il file appena salvato Application.ScreenUpdating = True Application.DisplayAlerts = True MsgBox "PROCESS COMPLETE" & vbNewLine & "YOU CAN CLOSE NOW" End Sub `ciao non so perchè ma mi sembra che post si sia cancellato... ri-posto il codice 🙂
Sub SalvaFoglioConNome() Dim perc As String Dim perc1 As String Dim percorso As String Dim percorso1 As String Dim i As Integer Dim n As Integer Dim j As Integer Dim NuovoFile As String Dim NuovoFile1 As String Dim periodo As String Dim cartella As String Application.ScreenUpdating = False Application.DisplayAlerts = False Workbooks.Open "N:\xxxxxdifot.xls" periodo = activeworkbooks & Range("A6").Value cartella = "xxxxx" & periodo If (Len(Dir(cartella, vbDirectory)) > 0) Then MsgBox "Path exists!" ' tutto ok, questa sub ha esaurito il suo compito ' perchè la cartella esiste già Else MsgBox "Path will be created" ' qui creo la cartella MkDir (("N:\xxxxxx & periodo) End If Workbooks("difot.xls").Close perc = ActiveWorkbook.Path & "\" percorso = perc & "DIFOT.xls" Workbooks.Open percorso Load UserForm1 UserForm1.Show vbModeless j = 0 n = ActiveWorkbook.Sheets.Count For i = 1 To ActiveWorkbook.Sheets.Count j = j + 1 With Sheets(i) If .Range("B8") <> "" Then UserForm1.ProgressBar1.Value = (j / n) * 100 'descrizione per l'utente UserForm1.Label1.Caption = "Individual Progress = " & Format((j / n) * 100, "0.00") & "%" 'permette l'esecuzione asincrona con altri eventi Windows DoEvents .Cells.Copy 'copia il foglio Workbooks.Add 'crea un nuovo file ActiveSheet.Paste 'incolla i dati 'rinomina il file e lo salva NuovoFile = "DIFOT " & Range("A3").Value & " - " & Range("A6").Value & ".xlsx" ActiveWorkbook.SaveAs Filename:=cartella & "\" & NuovoFile ActiveWorkbook.Close 'chiude il file appena salvato End If End With ' Sleep 1000 Next i Unload UserForm1 perc1 = ActiveWorkbook.Path & "\" percorso1 = perc1 & "DIFOT.xls" Workbooks.Open percorso NuovoFile1 = "_DIFOT " & Range("A6").Value & " " & Format(Date, "dd") & ".xlsx" ActiveWorkbook.SaveAs Filename:=cartella & "\" & NuovoFile1 ActiveWorkbook.Close 'chiude il file appena salvato Application.ScreenUpdating = True Application.DisplayAlerts = True MsgBox "PROCESS COMPLETE" & vbNewLine & "YOU CAN CLOSE NOW" End SubCiao,
sto facendo delle prove, cambiando il codice in questo modo per vedere se funziona... togliendo il riferimento della cella e mettendo tutto nel nome con il "format date".
questo:
NuovoFile1 = "_DIFOT " & Range("A6").Value & " " & Format(Date, "dd") & ".xlsx"
trasformato in:
NuovoFile1 = "_DIFOT " & Format(Date, "mm dd") & ".xlsx"
sto facendo un po' di esperimenti con il comando "date", vediamo se riesco a risolvere il problema
-
AutoreArticoli
