Option Explicit'iRng 为上一次选中的单元格,全局变量
Dim iRng As Object
'val为上一次选中单元格的值
Dim valPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)'本功能可以实现通过判断表格第26列的布尔值来决定是否允许用户修改单元格的值'不允许修改的逻辑为:保存上一次选中单元格的range和range的value'不允许修改的核心方法是给上一次选中的单元格赋值修改前的值'保存上一次选中单元格的range是为了知道上一个选中单元格的地址,存值是因为上一个选中的单元格值修改就找不到了'bug:如果选中的一个区域而不是单元格则无效'如果是操作锁定列,或表格之外的区域则退出subIf Target.Column > 25 Then Exit Sub'初始化状态栏Application.StatusBar = ""If Cells(Target.Row, 26) Then'在状态栏显示单元格锁定信息,没有锁定则无需显示Application.StatusBar = Application.StatusBar & "----当前单元格已锁定"End If'如果选中的不是一个区域则If Not IsArray(Target.Value) Then'如果iRng没有赋值则现在赋值If iRng Is Nothing ThenSet iRng = Targetval = iRng.FormulaElse'判断本列是否锁定If Cells(iRng.Row, 26) Then'如果锁定了,且现在的值不等于原来的值则,还原原来的值If iRng.Formula <> val Then'写入修改的日志信息iLog Target'时光倒流iRng.Formula = val'写入修改失败的日志信息log.Cells(log.Cells(1, 10).Value - 1, 5).Value = FalseEnd IfElse'如果没有锁定,且现在的值不等于原来的值If iRng.Formula <> val Then'写入日志iLog Target'写入修改成功的日志信息log.Cells(log.Cells(1, 10).Value - 1, 5).Value = TrueEnd IfEnd IfEnd If'保留时光Set iRng = Target'保留时光公式val = iRng.FormulaEnd If
End SubPrivate Sub iLog(ByVal Target As Range)Debug.Print log.Cells(1, 10).Value'在第1列写入时间log.Cells(log.Cells(1, 10).Value, 1) = Now'在第2列写入单元格地址log.Cells(log.Cells(1, 10).Value, 2) = Target.Address'在第3列写入单元格原值log.Cells(log.Cells(1, 10).Value, 3) = val'在第4列写入单元格新值log.Cells(log.Cells(1, 10).Value, 4).Value = iRng.Formula'在第10列第1行写入下一次写入新的日志的行号log.Cells(1, 10).Value = log.Cells(1, 10).Value + 1
End Sub

下面是运行效果, 代码放在sheet1里面使用,再新建一个sheet,在VBA界面属性里面修改新建的sheet2名称为log

通过VBA锁定单元格的值相关推荐

  1. VBA锁定单元格并记录单元格修改日志无bug篇

    先看效果:  在模块中插入以下代码 Type OldRngFormula As Variant '保存值Address As String '保存地址Locked As Boolean '是否锁定Ch ...

  2. 3, excel vba 获取表格里的单元格的值

    通过上一节, 我们己经可以掌握进入vba的编辑页面,可以愉快的写代码了. 接下来,给大家看看怎么取得表格里一个单元格的值.因为只有拿到了这个值,你才能对它进行各种改造 如下图: 单元格 A1 里有一个 ...

  3. excel vba 中如何实现拷贝复制单元格的值,而不拷贝单元格内的公式

    问题: 目前要实现将表1中的部分数据拷贝到表2中 用了sheets(1).[a1].CurrentRegion.Copy sheets(2).[a1] 现在出现一个现象, 有的时候表2的数据和表1是一 ...

  4. excel公式 某一个单元格等于另一个单元格的值_EXCEL函数学习5——COUNTIF函数

    [标签] excel函数.统计函数 前面我们学习了COUNT函数,我们回顾一下: count函数很简单,就是统计一个或多个区域的数字个数.相对来说,countif函数多了一个if,也就是可以增加条件了 ...

  5. php如何读取excel合并单元格_PHP读取excel中合并的单元格的值

    RT 在做的一个东西,需要读取excel中个别列的内容,之前用的php excelreader,但是合并的单元格都是空的值,而且我的excel也不好判断只要是空的就用数组中上个的值这种方法,本身exc ...

  6. excel空白单元格自动下下填充上一个单元格的值

    excel空白单元格自动下下填充上一个单元格的值 适用情况 图片: [外链图片转存失败(img-PLzkQDdz-1566355138598)(]) vba代码 Sub test() Set sh = ...

  7. NPOI导出数据,设置格式,锁定单元格

    代码包括: 1:导出多个sheet    2:设置单元格格式   3:合并单元格   4:下拉框选项   5:输入数字限制   6:锁定单元格 static void Main(string[] ar ...

  8. easyExcel导入导出(列锁定单元格、表头合并、导出类型限制、锁定单元格增加底色、设置密码、隐藏列等)

    easyexcel官网文档:https://www.yuque.com/easyexcel/doc/easyexcel easyexcel {maven 版本} GitHub网址:https://gi ...

  9. VBA(12)单元格的处理(二)/附数据类型;合并实例

    1.单元格的移动等操作 Sub a1()                         '单元格的输入     Range("a1") = "a" & ...

  10. 在excel工作表中c1单元格_已知Excel工作表中A1单元格和B1单元格的值分别为“电子科技大学”、“信息中心”,要求在C1单元格显示“...

    已知Excel工作表中A1单元格和B1单元格的值分别为"电子科技大学"."信息中心",要求在C1单元格显示" 更多相关问题 所谓犯罪现象的特性,是指为 ...

最新文章

  1. java定义全局变量_矮油,你知道什么是 Java变量的作用域 嘛?
  2. 2017-9-14-Linux移植:加快Linux主机的启动速度
  3. Linux之shell中的(),(()),{},=,==:{var}(cmd)((exp))=赋值==判断
  4. android listview 风格,【Android】listview卡片式列表的实现
  5. return print
  6. 10 进制转 2 进制、16 进制
  7. Power BI:M与DAX以及度量与计算列
  8. oracle中创建游标,oracle 存储过程创建游标
  9. 学习大数据需要的基础
  10. python3实战练手项目_Python0基础练手项目有哪些值得推荐?附实战项目+学习图谱...
  11. 易建科技eKing Cloud招聘,快到碗里来~
  12. 利用Python实现某度贴吧签到脚本「云函数模拟客户端」
  13. 2021年北航计算机学院夏令营面试经历
  14. 花了10分钟,终于弄懂了特征值和特征向量到底有什么意义
  15. XML转Json 设置指定节点为数组
  16. 无懈可击 css html5,无懈可击的Web设计(第3版) 带目录书签完整pdf[80MB]
  17. 装修行业百家号粉丝量统计(2019.12.24)
  18. RocketMQ启动报错解决:Using the DefNew young collector with the CMS collector is deprecated and will likely
  19. MATLAB RANSAC拟合空间直线
  20. unzip 命令指定解压路径

热门文章

  1. windows无法访问 计算机打印机,windows 7 无法连接到打印机 (错误0x0000000d)的解决方法...
  2. 浅谈腾讯云IM接入方式(java后端)
  3. Ultimaker_Cura-4.8-Win版本软件下载与安装
  4. 宝塔面板防火墙安装和使用教程详解
  5. c语言-厘米换算英尺英寸
  6. java------jdkd的安装与配置变量环境
  7. PHP编写简单的注册登录页面
  8. python面向对象练习题
  9. GoLang的安装和使用
  10. DataFrame 修改列名