我没有太多的VB经验,但我尝试做一件简单的事情。
我需要一个打开的Excel工作表来将自己复制到另一个位置。然后它应该继续使用现有的工作表,而不是打开它所创建的副本。
我现在使用了这段代码:
Sub savecsv ()
ActiveWorkbook.SaveAs "C:\test\testing.csv", FileFormat:=6
End Sub
此代码将工作表保存到新位置,但也会打开新工作表。 我已经google了一下,发现我可以使用SaveCopyAs来获取我的目标,所以我试图编辑上面的代码,但后来我得到错误:“编译错误:错误的参数数量或无效的属性赋值”
有人能帮助我使用有效的代码吗?还有一种方法可以自动创建它自动创建的文件,而不是询问我是否要写入现有文件。
答案 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副本。
可能比你想要解决的更多。如果您需要,请在评论中告诉我。