excel - 无法完全保护 Excel 工作表
问题描述
我正在尝试制作访问请求表,请求者可以在其中选择所需的访问权限并通过电子邮件提交以供批准。在我的表单中,我在请求者可以手动输入详细信息的字段中使用了文本框(ActiveX 控件)——比如他们的名字。对于某些字段,例如他们所属的部门,我使用组合框(ActiveX 控件)作为下拉列表,并使用复选框(ActiveX 控件)来选择他们请求的访问/权限。
一旦他们输入了所有详细信息并单击发送按钮,所有字段都应该被锁定,并且不能再进行编辑。我添加了以下宏来保护工作表,一旦单击,它就会显示受保护,但我仍然可以在文本框、复选框和下拉菜单中进行更改。
Dim ws As Worksheet
For Each ws In Worksheets
ws.Protect Password:="P@ssw0rd", UserInterfaceOnly:=True
Next ws
我试过了
Sub DisableBxs()
TADeptCombBx1.Enabled = False
TADeptCombBx2.Enabled = False
CheckBox1.Enabled = False
CheckBox10.Enabled = False
FirstNameTxtBx.Enabled = False
MiddleNameTxtBx.Enabled = False
FirstNameTxtBx.Enabled = False
MiddleNameTxtBx.Enabled = False
FirstNameTxtBx.Enabled = False
MiddleNameTxtBx.Enabled = False
End Sub
我在工作表中有 170 个文本框、复选框和组合框。执行代码时,调试时给我错误“找不到对象”
解决方案
为防止进入对象,您需要关闭它们的Enabled
属性。
要访问放置在工作表上的 ActiveX 对象,您需要使用 WorksheetOLEObjects
集合。
就像是
Sub ProtectAndDisableControls()
Dim ws As Worksheet
Dim ctrl As Object
' to exclude by control Name
For Each ws In Worksheets
For Each ctrl In ws.OLEObjects
If Not LCase$(ctrl.Name) Like "approve*" _
And Not LCase$(ctrl.Name) Like "reject*" Then
ctrl.Enabled = False
End If
Next ctrl
Next ws
' optional, to exclude specific control type(s)
' For Each ws In Worksheets
' For Each ctrl In ws.OLEObjects
' If Not TypeOf ctrl.Object Is MSForms.CommandButton Then
' ctrl.Enabled = False
' End If
' Next ctrl
' Next ws
End Sub
推荐阅读
- aws-amplify - 如何更新 AWS Amplify 中的嵌套 cloudformation 堆栈
- xcode - Xcode 在拆分视图中处理两个项目
- node.js - 在 Node.js 上使用 sharp with discordie,旧图像在后续运行中出现在输出中,损坏在哪里?
- android - Json 数据未在 ListView 中显示
- vue.js - 重新编码一个html
- rest - 通过在 Android 上工作的 restApi(在 iOS 中不工作)在颤振中上传图像
- javascript - react native 最新版本 0.61.4 的导航错误
- python - AWS Lambda JSON 格式
- ios - Crashlytics 显示 iPhone Xs Max 上出现大量崩溃
- apache-spark - 点燃RDD火花