无法完全保护 excel 个工作表

unable to completely protect excel worksheet

我正在尝试制作访问请求表,请求者可以在其中选择所需的访问权限并通过电子邮件提交以供批准。在我的表单中,我在请求者可以手动输入详细信息的字段中使用了文本框(ActiveX 控件)——比如他们的名字。对于某些字段,例如他们所属的部门,我使用组合框(ActiveX 控件)作为下拉列表,使用复选框(ActiveX 控件)来选择他们请求的访问/权限。

一旦他们输入了所有详细信息并单击发送按钮,所有字段都应该被锁定并且不能再进行编辑。我添加了下面的宏来保护 sheet,点击后,它显示受保护,但我仍然可以在文本框、复选框和下拉菜单中进行更改。

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

我在 sheet 中总共有 170 个文本框、复选框和组合框。执行代码时,它在调试时给我错误 'object not found'

要防止进入对象,您需要关闭它们的 Enabled 属性。

要访问放置在 sheet 上的 ActiveX 对象,您需要使用 Worksheet OLEObjects 集合。

类似

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