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

3

我有一个包含许多自定义工具的大型定制工具栏的.xlsm文件,用于处理工作中的常见情况。

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

所以我尝试了这种方法:添加另一个工作簿,将实际工作表复制/粘贴到新工作簿中,然后我想强制打开“另存为”。

'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

问题在于我输入文件名、选择目标文件夹并点击“保存”后,没有任何保存的内容!根本没有创建文件。

编辑1

可能我表述不够清晰。我有一个.xlsm文件,用于导入和操作来自其他来源的日期。我有一个包含所有需要数据(不包含公式)的工作表。我需要创建一个新工作簿,将该工作表复制/粘贴到新文件中,然后强制打开另存为。此时我手动选择目标文件夹,输入文件名并选择文件格式,然后点击保存。我需要能够在运行时选择这些内容

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

为什么?


你是否试图在没有宏的情况下保存工作簿? - 0m3r
新工作簿必须保存为无宏文件,是的。 - realtebo
你能不能不要保存成xlsx格式? - majjam
是的,我可以,但我不知道你想去哪里。我需要强制打开“另存为”对话框,这样我就可以选择在哪个位置以及以哪种格式保存,然后点击保存,我就可以将处理过的工作表正确地导出为新的工作簿,而没有任何宏/自定义工具栏。 - realtebo
我相信realtebo的意思是...当他从“另存为”对话框中按保存时,什么也没有发生。 - Davesexcel
@Davesexcel:是的,没错。我添加了澄清,希望可以解决问题。 - realtebo
2个回答

6

再试一次,给它一个机会...

      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

Application.GetSaveAsFilename 我的最爱 :) 不过有一个建议... 你需要在 SaveAs 中使用 FileFormat 来避免任何文件损坏。 - Siddharth Rout
@siddharth -那不是在“另存为”对话框中已经解决了吗? - Davesexcel
不幸的是,MyFile/FlSv 只会给你文件路径和名称。Ron已经在他的博客中涵盖了这个问题 :) 由于我再次查看了您的代码,我注意到还有一件事情。如果用户选择取消,您可能需要处理 FlSv - Siddharth Rout
1
我还看到一个错别字strFileName。我已经修改了代码。如果您对此不满意,请随时恢复更改 :) - Siddharth Rout
啊,是的,谢谢。我在寻找为什么“YourFileName”没有显示出来。 - Davesexcel
显示剩余2条评论

1
FileDialog类允许用户选择文件名,但它实际上并不执行保存操作。
调用FileDialog.Show后,您可以访问FileDialog.SelectedItems属性以获取用户选择的文件名称。
然后调用Workbook.SaveAs来保存文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接