Excel 2010 VBA: 如何导出当前工作表询问用户保存位置?

Excel 2010 VBA: How to export the current worksheet asking user where to save?

我有一个 .xlsm,带有一个很大的自定义工具栏,里面装满了用于处理工作中常见情况的自定义工具。

问题是我经常需要保存结果然后发送给其他用户,但我不想将宏/自定义工具栏保留到保存的工作簿中。

所以我正在尝试这样:添加另一个工作簿,copy/paste实际工作sheet到新工作簿中,然后我想强制打开另存为。

'copy entire sheet
Cells.Copy
Range("B2").Select 'just to leave only one cell selected when I return 

'Paste into a new workbook sheet 1
Workbooks.Add
Cells.Select
Application.DisplayAlerts = False
ActiveSheet.Paste
Application.DisplayAlerts = True
ActiveSheet.Range("B2").Select 'select only one cell
With Application.FileDialog(msoFileDialogSaveAs)
    .Show
End With

问题是,在我输入文件名并选择目标文件夹并按 'Save' 后,我什么也没有保存!根本没有创建文件。

编辑 1

可能是我的意图不明确。我有一个 .xlsm,用于从其他来源导入和操作日期。我得到了一个包含我需要的所有数据的 sheet(其中不包含公式)。我需要创建一个新工作簿,将 copy/paste 和 sheet 放入这个新文件中,然后强制打开另存为。此时我手动select目标文件夹,输入文件名并选择文件格式,然后按保存。我需要能够选择这些东西在运行时

实际上问题是 Excel 并没有真正保存新文件,我不知道为什么。

为什么?

FileDialog class 允许用户 select 一个文件名,它实际上并不进行保存。

调用 FileDialog.Show 后,您可以访问 FileDialog.SelectedItems 属性 以获取用户 select 编辑的文件的名称。

然后调用Workbook.SaveAs保存文件。

试一试,再来 1 次...

      Sub SaveASDiBox()
    Dim FlSv As Variant
    Dim MyFile As String
    Dim sh As Worksheet

    Set sh = Sheets("Sheet1")
    sh.Copy
    MyFile = "YourFileName.xlsx"
    FlSv = Application.GetSaveAsFilename(MyFile, fileFilter:="Excel Files (*.xlsx), *.xlsx)", Title:="Enter your file name")

    If FlSv = False Then Exit Sub

    MyFile = FlSv

    With ActiveWorkbook
        .SaveAs (MyFile), FileFormat:=51, CreateBackup:=False
        .Close False
    End With

End Sub