Excel – 可以限制用户更改单元格中的值的次数吗?
在Excel中,可以限制用户对单元格进行更改的次数吗? 我希望用户对单元格进行不超过2次的更改。 如果用户需要进行其他更改,他们将不得不给我发电子邮件。
要做到这一点,你将需要一些东西
- 制作一张名为
locks
的表 -
使你的锁表
very hidden
。 即使在Thisworkbook中,我也将这些代码放在Workbook_Open中Private Sub Workbook_Open() Sheets("locks").Visible = xlSheetVeryHidden End Sub
- 在你想要发生这种效果的所有工作表中,
right click> format cells.. > Protection > Locked = false
。 然后保护工作表。 这意味着,无论何时用户达到您的阈值,代码将取消保护表单,locking单元格,再次保护。 解锁的单元格可以像正常一样编辑,但locking的单元格只能读取 -
把它放在一个标准模块中
Option Explicit Public updateThreshold As Integer Public Sub CanUpdate(Target As Range) If ThisWorkbook.noEvents Then Exit Sub '''------------ updateThreshold = 2 'change me as you need '''--------------- Dim ws As Worksheet, searchRange As Range Dim rangeCol As Integer, updateCountCol As Integer, prevValueCol As Integer, updateDateCol As Integer rangeCol = 1 updateCountCol = 2 prevValueCol = 3 updateDateCol = 4 Set ws = Worksheets("locks") Dim tgtAddress As String tgtAddress = Target.Address(external:=True) Set searchRange = ws.Range("A:A").Find(tgtAddress) If searchRange Is Nothing Then Set searchRange = ws.Cells(ws.Rows.Count, 1).End(xlUp).Offset(rowoffset:=1) searchRange = tgtAddress searchRange.Offset(columnoffset:=updateCountCol) = 1 searchRange.Offset(columnoffset:=prevValueCol) = Target searchRange.Offset(columnoffset:=updateDateCol) = Now Else If searchRange.Offset(columnoffset:=updateCountCol) < updateThreshold Then searchRange.Offset(columnoffset:=updateCountCol) = searchRange.Offset(columnoffset:=updateCountCol) + 1 searchRange.Offset(columnoffset:=prevValueCol) = Target searchRange.Offset(columnoffset:=updateDateCol) = Now End If If searchRange.Offset(columnoffset:=updateCountCol) = updateThreshold Then Target.Worksheet.Unprotect 'here is where you'd need to use a password if need be Target.Locked = True Target.Worksheet.Protect 'use a password if need be End If End If End Sub
这不能做的是评论中提到的月份事情。 如果我有时间,我会回来的。
您可以在每个工作表的change
事件中调用此代码,例如updateThreshold target
如果你的用户不是巫师,而你自己也是巫师,那么我会提出一个你可以实现的方法。 这可能有点复杂,但它会完成这个诀窍。
简单的步骤:
-
使用
xlVeryHidden
表作为修改单元格的数据库。 将修改计数器放在相应的单元格中。 -
每次更新“数据库”
Worksheet_Change
function触发 -
如果计数高于允许的限制,则发出警报并取消修改
-
将第一次修改的date存储在表格的最后一个单元格中,并在该date后1个月修改时清除表格。
-
(可选)为VBA项目添encryption码保护