2013-06-18 10 views
12

Ho una cartella di lavoro di Excel che sul pulsante di selezione del modulo Voglio salvare una copia della cartella di lavoro con il nome file che corrisponde alla data corrente.Come fare un "Salva con nome" in codice vba, salvando la mia cartella di lavoro Excel corrente con datestamp?

Continuo a cercare il seguente ActiveWorkbook.SaveAs ("\\filePath\FormFlow To MSExcel\" & Left(Now(), 10)) ma sto ricevendo Run-time error '1004': Method 'SaveAs' of object'_Workbook' failed.

Qualcuno mi può aiutare con questo? Sono ancora molto nuovo nello sviluppo per Excel.

risposta

18

Molto probabilmente il percorso a cui si sta tentando di accedere non esiste. Sembra che tu stia cercando di salvare in una posizione relativa e non hai un'estensione di file in quella stringa. Se è necessario utilizzare i percorsi relativi è possibile analizzare il percorso da ActiveWorkbook.FullName

EDIT: Meglio sintassi sarebbe anche

ActiveWorkbook.SaveAs Filename:=myFileName, FileFormat:=xlWorkbookNormal 
+5

Grazie per l'aiuto! Finalmente ho ottenuto ciò che cercavo con il seguente: 'ActiveWorkbook.SaveCopyAs (" \\ filePath \ Programma di alimentazione \ FormFlow a MSExcel \ Archive \ FeedSampleReport- "& Format (Now()," mmddyyyy ") &" .xlsm ")' –

+6

Ho usato il tuo codice con molto successo. Grazie! Un piccolo punto: l'uso del formato file di xlWorkbookNormal salva il file come cartella di lavoro di Excel 97-2003. Per salvare come cartella di lavoro .xlsx corrente devi usare xlOpenXMLWorkbook. Il mio codice: –

+1

invece di usare i nomi (come xlWorkbookNormal), usa i numeri. Oppure potresti non essere in grado di compilare con un vecchio Excel alcune volte. Vedere http://www.rondebruin.nl/win/s5/win001.htm –

0

So che questo è un vecchio post, ma stavo cercando qualcosa di simile ... Penso che il tuo problema fosse che quando usi Now(), l'output sarà "6/20/2014" ... Questo è un problema per un nome di file così com'è "/" in esso. Come forse saprai, non puoi usare certi simboli nel nome di un file.

Acclamazioni

+0

@AnalyticLunatic - Sì, perché OGNI articolo stackoverflow che è stato contrassegnato come corretto è TOTALMENTE la risposta corretta e non potrebbe mai essere migliorata. Meglio, o soluzioni diverse non sono MAI trovati dagli altri dopo il fatto. –

0

io uso con successo il seguente metodo in un unico file,

Ma venire con esattamente lo stesso errore di nuovo ... solo l'ultima riga venire con errore

Newpath = Mid(ThisWorkbook.FullName, 1, _ 
Len(ThisWorkbook.FullName) - Len(ThisWorkbook.Name)) & "\" & "ABC - " & Format(Date, "dd-mm-yyyy") & ".xlsm" 
ThisWorkbook.SaveAs (Newpath) 
8

Il modo più semplice per utilizzare questa funzione è iniziare con 'Registrazione di una macro'. Una volta iniziata la registrazione, salva il file nella posizione desiderata, quindi imposta il tipo di file, molto probabilmente 'Cartella Excel abilitata per macro' ~ 'XLSM'

Interrompe la registrazione e puoi inizia a controllare il tuo codice.

ho scritto il codice qui sotto, che consente di salvare una cartella di lavoro utilizzando il percorso in cui è stato originariamente trova il file, nomi come "Evento [data nella cella 'A1']"

Option Explicit 

Sub SaveFile() 

Dim fdate As Date 
Dim fname As String 
Dim path As String 

fdate = Range("A1").Value 
path = Application.ActiveWorkbook.path 

If fdate > 0 Then 
    fname = "Event " & fdate 
    Application.ActiveWorkbook.SaveAs Filename:=path & "\" & fname, _ 
     FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False 
Else 
    MsgBox "Chose a date for the event", vbOKOnly 
End If 

End Sub 

Copia il codice in un nuovo modulo e quindi scrivere una data nella cella "A1" ad es 01-01-2016 -> assegna il sub a un pulsante ed esegui. [Nota] è necessario creare un file di salvataggio prima che questo script funzioni, perché una nuova cartella di lavoro viene salvata nella posizione di salvataggio automatico predefinita!

1

Potrebbe essere che il formato predefinito non corrisponda all'estensione del file. È necessario specificare il formato di file con il nome del file, assicurandosi che il formato corrisponda l'estensione:

With someWorkbook 
.SaveAs "C:\someDirector\Awesome.xlsm", fileformat:=xlOpenXMLWorkbookMacroEnabled 
End With 

OTOH, non vedo un'estensione sul vostro .SaveAs nome del file. Forse è necessario fornirne uno quando si esegue questa operazione a livello di programmazione. Questo ha senso: non è necessario fornire un'estensione dall'interfaccia GUI, ma ci si aspetta che i programmatori scrivano un codice univoco. Suggerisco di aggiungere l'estensione e il formato corrispondente. Vedi this msdn page per un elenco di formati di file. Ad essere onesti, non riconosco molto le descrizioni.

xlExcel8 = 56 è il.xls

xlExcel12 = 50 è formato .xlsb

xlOpenXMLWorkbook = 51 è formato .xlsx

xlOpenXMLWorkbookMacroEnabled = 52 viene formato .xlsm

xlWorkbookDefault è anche elencato con un valore di 51, il che mi imbarazza poiché pensavo che il formato predefinito potesse essere cambiato.

+0

Grazie. +1 per i formati di salvataggio –

+0

@PatrickLepelletier. Grazie. È successo così che stavo lavorando in VBA in quel momento e lo avevo capito da solo. Non scrivo codice VBA spesso; Probabilmente dovrò riferirmi alla mia risposta la prossima volta. – riderBill

+0

@riderBill - Sono contento che tu abbia enumerato tutto ciò. So quali sono molti formati, ma c'è ancora abbastanza confusione sui nomi delle costanti. Non so se da qualche parte Microsoft spiega quale costante di formato di file va con quale estensione di file. –