首页 > 解决方案 > Excel 只有在启用 VBA 时才应该可以保存文件,可能吗?

问题描述

我有一个具有三个权限级别的文件。
系统会提示您在用户表单上输入密码,然后您将获得管理员权限、读/写或只读权限。
这很好用,除非您不启用宏。

如果您不启用宏提示,则不会显示用户表单并且未设置权限,因此您具有完全访问权限。

我已经看到您可以使用启动画面,但据我所知,您需要保存工作簿才能正常工作?
它们的基本概念是在关闭隐藏工作表和取消隐藏启动屏幕之前,然后保存工作簿。但是如果用户犯了一个错误,什么要关闭而不保存并稍后重新打开呢?文件在所有工作表可见的情况下关闭?

所以我想也许我可以使用“资源管理器->右键单击->属性->只读”属性作为额外的保护层?

我找到了这些功能。

ActiveWorkbook.ChangeFileAccess Mode:=xlreadonly
ActiveWorkbook.ChangeFileAccess Mode:=xlreadwrite 

但是我尝试了 readonly 行,它确实设置了只读,文件无法保存。
然后我关闭工作簿而不保存并再次打开。但似乎该属性没有在文件的属性中设置,因为它没有被勾选,当我打开文件时我可以保存它。

有没有其他方法可以解决这个问题?
我想对用户“强制”VBA,或者确保他/她在没有 VBA 的情况下打开文件时无法保存文件。

标签: vbaexcel

解决方案


我找到了一个似乎可行的解决方案。

您可以在Workbook_BeforeClose文件属性中使用此行使文件成为只读文件。

SetAttr Application.ActiveWorkbook.FullName, vbReadonly

这将在属性中设置刻度线,Excel 会注意到文件被写保护。

然后在Workbook_Open() (或在我的情况下,当权利已经确立时)

SetAttr Application.ActiveWorkbook.FullName, vbReadwrite
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite

第一行删除了文件属性中的标记,但 Excel 仍将文件“记住”为只读文件。
第二行将告诉 Excel 使其成为 ReadWrite 并且文件再次正常工作。


推荐阅读