【发布时间】:2013-09-24 20:11:50
【问题描述】:
我想:
- 使用模板工作簿进行数据操作
- 将此工作簿的副本另存为 .xlsx(SaveCopyAs 不允许您更改文件类型,否则会很棒)
- 继续显示原始模板(不是“另存为”的模板)
使用SaveAs 完全符合预期 - 它在删除宏的同时保存工作簿并向我显示新创建的 SavedAs 工作簿的视图。
不幸的是,这意味着:
- 除非我重新打开启用宏的工作簿,否则我不再查看它
- 此时代码执行停止,因为
- 如果我忘记保存,任何宏更改都会被丢弃(注意:对于生产环境这没问题,但对于开发来说,这是一个巨大的痛苦)
有什么办法可以做到吗?
'current code
Application.DisplayAlerts = False
templateWb.SaveAs FileName:=savePath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
templateWb.Activate
Application.DisplayAlerts = True
'I don't really want to make something like this work (this fails, anyways)
Dim myTempStr As String
myTempStr = ThisWorkbook.Path & "\" & ThisWorkbook.Name
ThisWorkbook.Save
templateWb.SaveAs FileName:=savePath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWorkbook.Close
Workbooks.Open (myTempStr)
'I want to do something like:
templateWb.SaveCopyAs FileName:=savePath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False 'SaveCopyAs only takes one argument, that being FileName
另外请注意,虽然SaveCopyAs 可以让我将其另存为其他类型(即templateWb.SaveCopyAs FileName:="myXlsx.xlsx"),但打开它时会出现错误,因为它现在具有无效的文件格式。
【问题讨论】:
-
我能想到的一个蹩脚的解决方法是 SaveCopyAs,打开副本,将其保存为所需的格式,然后删除副本。如果你把它塞进一个子程序中,它就不会弄乱你的主程序。
-
使用
SaveCopyAs创建一个副本,然后打开该副本并另存为? -
@Cor_Blimey:抱歉没有看到你的评论
-
或者创建一个新工作簿,将所有工作表复制到其中,然后将其保存为 xlsx?
-
这两个选项都让我在内心深处死去(好吧很多)。 @Cor_Blimey 我最初也确实想过这样做,但似乎应该有更好的方法。我正在使用网络驱动器,因此理想的做法是尽量减少对它们的多次节省。