excel - 在 Excel VBA 中关闭表单时,QueryClose 是保护工作表的正确方法吗?
问题描述
我有一个包含许多工作表的工作簿。其中一些必须受到保护,而其中一些必须解锁。棘手的部分是userform
使用 Excel VBA 创建的将用于将数据添加到受保护的工作表之一,并且当所述工作表受到保护时代码会失败,因为它应该向表中添加行以保存数据。
我尝试使用以下代码来解决此问题:
Sheets("Sales").Protect Password:="123", AllowInsertingRows:=True, UserInterFaceOnly:=True
虽然在运行它之后我可以通过用户界面手动添加行,但似乎我试图使用的属性只能以这种方式工作,VBA 代码仍然不能和新行到受保护的工作表。
因此,我想到的解决方法是在userform
初始化时取消保护工作表,如下所示:
Private Sub UserForm_Initialize()
Sheets("Sales").Unprotect "123"
End Sub
这样userform
可以毫无问题地保存所有数据。但是,我的问题是如何再次正确保护它。关闭 有两种方法userform
,一种是使用仅运行这段Unload Me
代码的取消按钮,第二种是使用表单右上角的 X。我想保持这两个选项可用,但还要确保在用户尝试编辑工作表之前再次对其进行保护(不可能在userform
打开的情况下选择任何内容)。
我认为最好的选择是以下代码:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Sheets("Sales").Protect Password:="123"
End Sub
经过测试,我相信它可以工作,但我不确定这是否是正确的方法。也许有一种我没有考虑到的特定情况最终会导致用户能够编辑应该受到保护的工作表。请让我知道我的代码是否有任何缺陷?
解决方案
推荐阅读
- embedded - 在 STM32 设备中读取和写入文件到闪存的末尾
- clojure - 如何遍历列表并制作元素列表
- asp.net-core - Blazor 服务器端递归组件内存消耗过多
- javascript - Chrome 扩展将动态脚本注入标头和打开正文标记后
- d3.js - 气泡图中 y 位置的强制碰撞
- xcode - Xcode 11 - 关于为 iOS 构建的 ld 警告,但为独立构建的目标文件
- c++ - 将 Eigen::MatrixXd 转换为 arma::mat 并在新对象上制作副本
- c++ - 做图灵机,不太懂动作表
- apache - Python 应用程序的 HTTP 504 错误 AWS ElasticBeanstalk
- javascript - React Hooks 静态变量:对象属性与 useRef()