如何使用Excel .SaveAs但保留原始工作表名称

Way*_*unn 5 excel vba excel-vba

我正在使用Excel 2010,并且有一个userform,它将支持各种处理选项(即按预定义范围排序,获取统计数据和可怕的'export'(SaveAs).我想允许用户导出其中一个工作表CSV或XLSX.

问题是当我使用SaveAs保存为CSV时,它会将工作表重命名为我选择的文件名(减去扩展名).我搜索了几个小时,但没找到任何提供解决方案的地方.我确实找到了一个Stack 5岁以上的帖子,但它没有解决方案(请参阅如何在运行保存宏后停止重命名excelsheets)

任何帮助,将不胜感激!谢谢!

这是代码:

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
Run Code Online (Sandbox Code Playgroud)

Cor*_*mey 4

事先使用不带参数的 ws.Copy 然后保存新工作簿

例如,将您的代码调整为:

    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
Run Code Online (Sandbox Code Playgroud)

ps 我假设您有代码可以处理在 GetSaveAsFilename 上单击“取消”,并且为了清楚起见而将其删除;)