2014-05-21 12 views
5

Sto lavorando con Excel 2010 e ho un modulo utente che supporterà varie opzioni di elaborazione (ad esempio ordinare per intervalli predefiniti, ottenere statistiche e il temuto 'esportazione' (SaveAs) Voglio consentire all'utente di esportare uno dei fogli come CSV o XLSXCome utilizzare Excel .SaveAs ma mantenere il nome del foglio originale

Il problema è quando utilizzo SaveAs per salvare come CSV, rinominando il foglio con il nome file selezionato (meno l'estensione Ho cercato per ore e non ho trovato nessun posto che fornisca una soluzione. Ho trovato un post di Stack 5+ anni, ma non aveva una soluzione (vedi How to stop renaming of excelsheets after running the save macro)

Qualsiasi aiuto sarebbe apprezzato ! Grazie!

Ecco il codice:

Dim ws    As Excel.Worksheet 
Dim strSaveName  As String 
Dim strThisName  As String 

strThisName = ThisWorkbook.Path & ThisWorkbook.Name 
strSaveName = Application.GetSaveAsFilename(_ 
    fileFilter:="Text Files (*.csv), *.csv") 

Set ws = Worksheets("Export") 
ws.SaveAs Filename:=strSaveName, FileFormat:=xlCSV 

'I do the following TO UNDO THE RENAME <GROAN> (for now just saving as 0.csv) 
Sheets("0").Name = "Export" 

' Then the following is to regain my original filename since I will continue working... 
ws.SaveAs Filename:=strThisName, FileFormat:=xlOpenXMLWorkbookMacroEnabled 

risposta

3

Usa ws.Copy senza args anticipo quindi salvare la nuova cartella di lavoro

esempio Adattare il tuo codice come:

Dim ws    As Excel.Worksheet 
    Dim strSaveName  As String 

    strSaveName = Application.GetSaveAsFilename(_ 
     fileFilter:="Text Files (*.csv), *.csv") 

    Set ws = Worksheets("Export") 

    'Copy the ws to a new workbook 
    ws.Copy 
    'With the new wb: 
    With Workbooks(Workbooks.Count) 
     'Save and close the new workbook 
     .SaveAs Filename:=strSaveName, FileFormat:=xlCSV 
     .Close False 
    End With 

p.s. Presumo che tu abbia il codice da gestire facendo clic su Annulla su GetSaveAsFilename e appena rimosso per chiarezza nella domanda;)

+0

Sì, non ho appena mostrato il codice per "Annulla". Ho aggiunto un '.Saved = True' al tuo codice per evitare 'Vuoi salvare ...' quando è stato rilasciato '.Close'. Grazie mille per la soluzione !!! –

+0

@ WayneG.Dunn ah, non pensavo che avrebbe mostrato come non ci fossero nuovi cambiamenti dall'ultimo salvataggio, ma devo essere sbagliato in questa situazione (tutto un po 'divertente con le nuove cartelle di lavoro). Sono contento che ci abbia aiutato. –

+1

Sono stato anche sorpreso per il prompt, come concordo, è stato appena salvato! –

Problemi correlati