将CSV文件保存到其他位置而不打开新文件

时间:2014-02-14 16:12:29

标签: excel vba excel-vba save-as

我没有太多的VB经验,但我尝试做一件简单的事情。

我需要一个打开的Excel工作表来将自己复制到另一个位置。然后它应该继续使用现有的工作表,而不是打开它所创建的副本。

我现在使用了这段代码:

Sub savecsv ()
ActiveWorkbook.SaveAs "C:\test\testing.csv", FileFormat:=6
End Sub

此代码将工作表保存到新位置,但也会打开新工作表。 我已经google了一下,发现我可以使用SaveCopyAs来获取我的目标,所以我试图编辑上面的代码,但后来我得到错误:“编译错误:错误的参数数量或无效的属性赋值”

有人能帮助我使用有效的代码吗?还有一种方法可以自动创建它自动创建的文件,而不是询问我是否要写入现有文件。

1 个答案:

答案 0 :(得分:1)

.saveCopyAs命令只需要文件名,而不需要文件类型。所以你可以简单地使用

ActiveWorkbook.saveCopyAs "C:\test\testing.csv"

您收到的错误消息是由您尝试传递的第二个参数引起的。副本只是一个副本 - 根本没有变化。

要在没有警告的情况下覆盖现有副本,请关闭警报:

Application.ScreenUpdating=False
Application.DisplayAlerts = False     ' so you can overwrite without warning
ActiveWorkbook.SaveCopyAs "C:\test\testing.csv"
Application.DisplayAlerts = True
Application.ScreenUpdating=True

但是这是一个警告:saveCopyAs命令无法更改文件类型。由于您希望在文件中嵌入宏,因此它必须是.xlsm类型文件。更改名称会覆盖saveCopyAs命令的行为。

这是另一件棘手的事情。如果您改为使用SaveAs,则会关闭现有文件并打开新文件。宏可以继续运行 - 但如果它试图关闭文件(它在其中),它现在将停止。

我能看到的唯一解决方法是创建一个AddIn - 这是在“工作簿之外”运行的代码。您可以使用菜单项,功能区上的按钮等来调用插件中的任何代码 - 这样可以更灵活地创建打开的工作簿的.csv副本。

可能比你想要解决的更多。如果您需要,请在评论中告诉我。