ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 968|回复: 1

[求助] 取消一列的保护

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-9-3 15:22 | 显示全部楼层 |阅读模式
整个表格一部分表格保护了,一部分可以输入,现在想把被保护的一列取消保护,但是代码锁定,撤销保护后,一编辑就触动change,自动锁死了,要怎样操作才能实现呢?



Private Sub Worksheet_Change(ByVal Target As Range)

     Application.EnableEvents = False   '禁用此事件
'Application.ScreenUpdating = False '禁止屏幕刷新
    Application.Calculation = xlManual
     If Target.Row < 5 Or Target.Row > 104 Then Exit Sub
    ActiveSheet.Unprotect Password:="880"

    Dim r%, jcount%, n%, sr%


    r = Target.Row
    With Sheet6
        strsql = "select * from [基础信息$A1:p" & Sheet5.[a65536].End(xlUp).Row & "] where 员工编号 like  '%" & .Cells(r, 1) & "%' or 员工姓名 like  '%" & .Cells(r, 1) & "%' "
        If CNN.State = 0 Then CNN.Open DbPath & ThisWorkbook.FullName
        RST.Open strsql, CNN, 1, 1
        If RST.EOF = False Then
            jcount = RST.RecordCount
            If jcount = 1 Then
                If Application.CountIf(.Range("a4:a" & r - 1), RST!员工编号) > 0 Or Application.CountIf(.Range("a" & r + 1 & ":a104"), RST!员工编号) > 0 Then
                    .Cells(r, 1).ClearContents
                    RST.Close
                    Application.EnableEvents = True    '启用此事件
                    MsgBox "已存在该员工的薪资信息!", 1 + 64, "系统提示"
                    Exit Sub
                End If
                .Cells(r, 1) = RST!员工编号
                .Cells(r, 2) = RST!员工姓名
                .Cells(r, 3) = RST!隶所部门
                If IsNull(RST!暂缓发放) Then .Cells(r, 25) = IIf(IsNull(RST!工资卡号), "", RST!工资卡号) Else .Cells(r, 25).ClearContents
                .Cells(r, 17) = Round(Application.Sum(.Range("e" & r & ":k" & r)) - Application.Sum(.Range("l" & r & ":p" & r)), 2)
                If Sheet8.Range("a2:a803").Find(.Cells(r, 1), LookIn:=xlValues) Is Nothing Then
                    .Cells(r, 19) = iitax(.Cells(r, 17) - .Cells(r, 18))
                Else
                    sr = Sheet8.Range("a2:a803").Find(What:=.Cells(r, 1), Lookat:=xlWhole).Row
                    .Cells(r, 19) = iitax(.Cells(r, 17) - .Cells(r, 18) + Sheet8.Cells(sr, 17) - Sheet8.Cells(sr, 18)) - Sheet8.Cells(sr, 19)
                End If
                .Cells(r, 24) = Round(.Cells(r, 17) - Application.Sum(.Range("r" & r & ":w" & r)), 2)
            Else
                .Cells(r, 2).ClearContents
                .Cells(r, 3).ClearContents
                .Cells(r, 17).ClearContents
                .Cells(r, 24).ClearContents
                .Cells(r, 25).ClearContents
                If .Cells(r, 1) <> "" Then MsgBox "您输入的关键字太少!", 1 + 64, "系统提示"
            End If
        Else
            .Cells(r, 2).ClearContents
            .Cells(r, 3).ClearContents
            .Cells(r, 17).ClearContents
            .Cells(r, 24).ClearContents
            .Cells(r, 25).ClearContents
            MsgBox "未查到相符的记录!", 1 + 64, "系统提示"
        End If
        RST.Close
    End With
    ActiveSheet.Protect ("880"), DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
    Application.Calculation = xlAutomatic
    '  Application.ScreenUpdating = True '启用屏幕刷新
    Application.EnableEvents = True    '启用此事件
End Sub

TA的精华主题

TA的得分主题

发表于 2018-9-3 22:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
权作参考:
[对指定区域的单元格进行锁定与解锁]
http://club.excelhome.net/thread-874471-3-1.html
见第22楼

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-13 13:54 , Processed in 0.018256 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表