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

如果你的用户不是巫师,而你自己也是巫师,那么我会提出一个你可以实现的方法。 这可能有点复杂,但它会完成这个诀窍。

简单的步骤:

  1. 使用xlVeryHidden表作为修改单元格的数据库。 将修改计数器放在相应的单元格中。

  2. 每次更新“数据库” Worksheet_Changefunction触发

  3. 如果计数高于允许的限制,则发出警报并取消修改

  4. 将第一次修改的date存储在表格的最后一个单元格中,并在该date后1个月修改时清除表格。

  5. (可选)为VBA项目添encryption码保护