VBA - 强制excel以自定义格式保存

时间:2013-08-09 13:01:34

标签: excel vba excel-vba

对于正在工作的项目,我希望允许用户为单个项目创建要保存的数据导出,因为无法为每个项目保存我的主工作簿。

我创建了一个将数据导出到另一个工作簿的函数,但现在我想确保用户不会直接更改导出的数据(通过设置其他文件格式,我认为用户会考虑更多关于打开工作簿,因此不是“意外”)

所以我的问题是: 我可以强制用户将文件另存为.clg文件吗?

修改

我通过使用.SaveAs保存文件并将格式指定为“51”(与.xlsx相同)解决了问题。我使用GetSaveAsFilename来允许用户决定位置(即项目文件夹),只浏览.clg文件。

Dim sFullName As String
sFullName = exportFile.Application.GetSaveAsFilename(thisFile.Sheets("Project information").Cells(1, 2).Value, "Export files (*.clg),*.clg", , "Choose export location", "Export")
If Not Len(sFullName) = 0 Or sFullName = "False" Then

    exportFile.SaveAs Filename:=sFullName, FileFormat:=51

End If

exportFile.Close

如果有人想要使用Monshaw先生的方法,一种方法是创建一个类模块,它具有变量withevents - 这意味着任何在变量中触发的事件都会在模块中触发。

Public WithEvents wbk As Workbook

请记住将类的实例保留在内存中,例如将其添加到集合中。

使用BeforeSave的另一种方法是动态编写代码,请参阅http://www.ozgrid.com/forum/showthread.php?t=163903

2 个答案:

答案 0 :(得分:1)

'clg'是您使用的格式吗?或者只是随机而不是xls / x扩展名?

如果确实需要在excel中查看和查看文件(猜测你没有导出windows目录文件?)那么更改扩展名可能不是最好的选择。

如果您使用VBA创建导出,那么您可以自动执行某些操作,以使用户更清楚他们不应该编辑数据。

Workbook.SaveAs方法具有“ReadOnlyRecommended”选项,该选项将通知用户在打开工作簿时应该以只读方式打开工作簿。 (虽然它是可选的,所以他们可以忽略它)

假设数据始终是只读的,您还可以锁定工作簿,以便不进行任何更改。

更新

如果要使用自定义扩展名(而不是自定义格式)保存Excel工作簿,则使用Workbook.SaveAs方法将起作用。例如:ThisWorkbook.SaveAs "Report.clg"

您需要让您的导出代码为您执行此操作,或者如果它是一个更加手动的过程,您可以创建一个带有按钮的宏来调用保存 - 而不是使用标准保存 - 对话。

如果您想要保存为自定义格式,并且它不是Workbook.SaveAssupported formats)所支持的格式之一,那么您必须按照Mr.Monshaw的建议进行操作并注意onbeforesave并手动生成文件。 (不太可能有人对Windows目录转换器做了一个excel)

答案 1 :(得分:0)

我不确定clg的常量是什么,但vba中的SaveAs的fileformat属性允许您决定要保存的格式

如果您能找到文件格式,我会看到一个类似于此的聪明解决方案,只需使用这样的工作簿事件为您的图书添加一个宏:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Call SaveAsCLG(SaveAsUI)          'set save type
    Cancel = True                                 'cancel user save

End Sub

将覆盖用户的另存为请求