vba - Excel 只有在启用 VBA 时才应该可以保存文件,可能吗?
问题描述
我有一个具有三个权限级别的文件。
系统会提示您在用户表单上输入密码,然后您将获得管理员权限、读/写或只读权限。
这很好用,除非您不启用宏。
如果您不启用宏提示,则不会显示用户表单并且未设置权限,因此您具有完全访问权限。
我已经看到您可以使用启动画面,但据我所知,您需要保存工作簿才能正常工作?
它们的基本概念是在关闭隐藏工作表和取消隐藏启动屏幕之前,然后保存工作簿。但是如果用户犯了一个错误,什么要关闭而不保存并稍后重新打开呢?文件在所有工作表可见的情况下关闭?
所以我想也许我可以使用“资源管理器->右键单击->属性->只读”属性作为额外的保护层?
我找到了这些功能。
ActiveWorkbook.ChangeFileAccess Mode:=xlreadonly
ActiveWorkbook.ChangeFileAccess Mode:=xlreadwrite
但是我尝试了 readonly 行,它确实设置了只读,文件无法保存。
然后我关闭工作簿而不保存并再次打开。但似乎该属性没有在文件的属性中设置,因为它没有被勾选,当我打开文件时我可以保存它。
有没有其他方法可以解决这个问题?
我想对用户“强制”VBA,或者确保他/她在没有 VBA 的情况下打开文件时无法保存文件。
解决方案
我找到了一个似乎可行的解决方案。
您可以在Workbook_BeforeClose
文件属性中使用此行使文件成为只读文件。
SetAttr Application.ActiveWorkbook.FullName, vbReadonly
这将在属性中设置刻度线,Excel 会注意到文件被写保护。
然后在Workbook_Open()
(或在我的情况下,当权利已经确立时)
SetAttr Application.ActiveWorkbook.FullName, vbReadwrite
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite
第一行删除了文件属性中的标记,但 Excel 仍将文件“记住”为只读文件。
第二行将告诉 Excel 使其成为 ReadWrite 并且文件再次正常工作。
推荐阅读
- powershell - 在powershell中从原始数据构造一个表
- java - 尝试通过 android studio 运行 javafx 时出错
- asp.net-core - 为什么在 ASP.NET Core Web API 中上传文件时出现 502 错误?
- machine-learning - ImportError: DLL load failed: 找不到指定的过程
- neo4j - Neo4j - 获取特定类型节点的所有父节点
- python - 具有 16 个整数的列表的排列,但前提是满足 4 个条件
- docker - 错误 Docker 两次启动同一个容器
- sql - 将 SQL 查询转换为图形模型
- c# - 由于拥有实体,EF Core 2.1 将不需要的列添加到架构
- java - Android-Listview setOnItemClickListener 错误