当前位置:   article > 正文

通过VBA锁定单元格的值

vba锁定单元格
  1. Option Explicit
  2. 'iRng 为上一次选中的单元格,全局变量
  3. Dim iRng As Object
  4. 'val为上一次选中单元格的值
  5. Dim val
  6. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  7. '本功能可以实现通过判断表格第26列的布尔值来决定是否允许用户修改单元格的值
  8. '不允许修改的逻辑为:保存上一次选中单元格的range和range的value
  9. '不允许修改的核心方法是给上一次选中的单元格赋值修改前的值
  10. '保存上一次选中单元格的range是为了知道上一个选中单元格的地址,存值是因为上一个选中的单元格值修改就找不到了
  11. 'bug:如果选中的一个区域而不是单元格则无效
  12. '如果是操作锁定列,或表格之外的区域则退出sub
  13. If Target.Column > 25 Then Exit Sub
  14. '初始化状态栏
  15. Application.StatusBar = ""
  16. If Cells(Target.Row, 26) Then
  17. '在状态栏显示单元格锁定信息,没有锁定则无需显示
  18. Application.StatusBar = Application.StatusBar & "----当前单元格已锁定"
  19. End If
  20. '如果选中的不是一个区域则
  21. If Not IsArray(Target.Value) Then
  22. '如果iRng没有赋值则现在赋值
  23. If iRng Is Nothing Then
  24. Set iRng = Target
  25. val = iRng.Formula
  26. Else
  27. '判断本列是否锁定
  28. If Cells(iRng.Row, 26) Then
  29. '如果锁定了,且现在的值不等于原来的值则,还原原来的值
  30. If iRng.Formula <> val Then
  31. '写入修改的日志信息
  32. iLog Target
  33. '时光倒流
  34. iRng.Formula = val
  35. '写入修改失败的日志信息
  36. log.Cells(log.Cells(1, 10).Value - 1, 5).Value = False
  37. End If
  38. Else
  39. '如果没有锁定,且现在的值不等于原来的值
  40. If iRng.Formula <> val Then
  41. '写入日志
  42. iLog Target
  43. '写入修改成功的日志信息
  44. log.Cells(log.Cells(1, 10).Value - 1, 5).Value = True
  45. End If
  46. End If
  47. End If
  48. '保留时光
  49. Set iRng = Target
  50. '保留时光公式
  51. val = iRng.Formula
  52. End If
  53. End Sub
  54. Private Sub iLog(ByVal Target As Range)
  55. Debug.Print log.Cells(1, 10).Value
  56. '在第1列写入时间
  57. log.Cells(log.Cells(1, 10).Value, 1) = Now
  58. '在第2列写入单元格地址
  59. log.Cells(log.Cells(1, 10).Value, 2) = Target.Address
  60. '在第3列写入单元格原值
  61. log.Cells(log.Cells(1, 10).Value, 3) = val
  62. '在第4列写入单元格新值
  63. log.Cells(log.Cells(1, 10).Value, 4).Value = iRng.Formula
  64. '在第10列第1行写入下一次写入新的日志的行号
  65. log.Cells(1, 10).Value = log.Cells(1, 10).Value + 1
  66. End Sub

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/170428
推荐阅读
相关标签
  

闽ICP备14008679号