对于正在工作的项目,我希望允许用户为单个项目创建要保存的数据导出,因为无法为每个项目保存我的主工作簿。
我创建了一个将数据导出到另一个工作簿的函数,但现在我想确保用户不会直接更改导出的数据(通过设置其他文件格式,我认为用户会考虑更多关于打开工作簿,因此不是“意外”)
所以我的问题是: 我可以强制用户将文件另存为.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
答案 0 :(得分:1)
'clg'是您使用的格式吗?或者只是随机而不是xls / x扩展名?
如果确实需要在excel中查看和查看文件(猜测你没有导出windows目录文件?)那么更改扩展名可能不是最好的选择。
如果您使用VBA创建导出,那么您可以自动执行某些操作,以使用户更清楚他们不应该编辑数据。
Workbook.SaveAs
方法具有“ReadOnlyRecommended”选项,该选项将通知用户在打开工作簿时应该以只读方式打开工作簿。 (虽然它是可选的,所以他们可以忽略它)
假设数据始终是只读的,您还可以锁定工作簿,以便不进行任何更改。
更新
如果要使用自定义扩展名(而不是自定义格式)保存Excel工作簿,则使用Workbook.SaveAs
方法将起作用。例如:ThisWorkbook.SaveAs "Report.clg"
您需要让您的导出代码为您执行此操作,或者如果它是一个更加手动的过程,您可以创建一个带有按钮的宏来调用保存 - 而不是使用标准保存 - 对话。
如果您想要保存为自定义格式,并且它不是Workbook.SaveAs
(supported 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
将覆盖用户的另存为请求