2014-05-21 9 views
5

Pracuję z programem Excel 2010 i mam formularz użytkownika, który obsługuje różne opcje przetwarzania (np. Sortowanie według wstępnie zdefiniowanych zakresów, uzyskiwanie statystyk i przerażające "eksportowanie" (SaveAs) Chcę zezwolić użytkownikowi na eksport jednego z arkuszy jako CSV lub XLSX.Sposób korzystania z programu Excel .SaveAs, ale zachowaj oryginalną nazwę arkusza

Problem polega na tym, że używam SaveAs do zapisania jako pliku CSV, zmieniam nazwę arkusza na nazwę pliku, który wybrałem (bez rozszerzenia) Szukałem wiele godzin i nie znalazłem żadnego miejsca, które zapewnia rozwiązanie.Znalazłem stos 5+ latek, ale nie miałem rozwiązania (zobacz How to stop renaming of excelsheets after running the save macro)

Każda pomoc byłaby doceniana Dzięki!

Oto kod:

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 

Odpowiedz

3

Używaj ws.Copy bez args wcześniej następnie zapisać nowy skoroszyt

np dostosuj swój kod, aby wyglądał następująco:

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. Zakładam, że masz kod do obsługi kliknięcia Anuluj na GetSaveAsFilename i po prostu usunięto go dla jasności w pytaniu;)

+0

Tak, po prostu nie pokazałem kodu dla "Anuluj". Dodałem kod ".Saved = True" do kodu, aby uniknąć "Czy chcesz zapisać ..." po wydaniu polecenia ".Close". Dziękuję bardzo za Twoje rozwiązanie !!! –

+0

@ WayneG.Dunn ah, nie myślałem, że to pokazałoby, ponieważ nie było żadnych nowych zmian od czasu ostatniego zapisu, ale muszę się mylić w tej sytuacji (wszystko trochę zabawne z nowymi skoroszytami). Cieszę się, że to pomogło. –

+1

Zaskoczyło mnie również zgłoszenie, ponieważ zgadzam się - został on właśnie zapisany! –