0

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

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

所以我的问题是:我可以强制用户将文件保存为 .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

4

2 回答 2

1

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

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

如果您使用 VBA 创建导出,那么您可以自动化一些事情,让用户更清楚他们不应该编辑数据。

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

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

更新

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

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

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

于 2013-08-09T13:31:26.570 回答
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

这将覆盖用户另存为请求

于 2013-08-09T13:36:45.460 回答