excel - 当某些单元格不再为空白时,如何锁定 Excel 行?
问题描述
我正在编辑我的问题以使其更加明确。
我在表格中有一个 Excel 表格,其中每一行都是每月支付的学费。我想锁定所有已支付的行(即如果 E 列中有金额),以便在没有密码的情况下无法删除或更改它。
已支付的行不一定按顺序排列。
我已经尝试了很多在这里找到的不同的 VBA 代码。但是它们都没有为我工作(其中一些工作但它们只锁定我当时正在编辑的行,而不是所有在 E 列中具有值的行)
我从未使用过 VBA ......但我必须解决这个问题。我在厄瓜多尔的一所教会学校,我不认识任何可以帮助我的人......我真的需要尽快解决这个问题,因为秘书已经不小心删除了数据(!!!)
解决方案
首先,您使用 UserInterfaceOnly 保护工作表。对于本主题,请参阅设置 Range.Locked 时出现错误 1004。
将以下 Sub 放入 VBA 模块中,将光标放在其中某处,然后按 F5:
Public Sub LockActiveSheet()
ActiveSheet.Protect UserInterfaceOnly:=True
End Sub
然后,您可以在同一 VBA 模块中使用以下代码解锁空单元格并锁定 A:E 列中包含值的单元格。确保工作表“养老金”已打开。然后将光标放入其中并按F5。
Public Sub LockNonEmptyCells()
Dim lngLastRow As Long 'index of the last used row
Dim rngAE As Range 'the range from cell A3 to Exxx (last used row)
Dim i As Long 'counter in For...Next
lngLastRow = [A1].SpecialCells(xlLastCell).Row 'get index of last used row
Set rngAE = [A3].Resize(lngLastRow - 2, 5) 'get data range
With rngAE.Cells 'cycle through all cells
For i = 1 To .Count
.Item(i).Locked = Not IsEmpty(.Item(i)) 'unlock empty cells, lock cells with value
Next i
End With
End Sub
为了将来的编辑,您可以将以下代码粘贴到工作表的代码模块中:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <= 5 Then Target.Locked = True
End Sub
这将在您输入值后直接锁定单元格。
推荐阅读
- php - 更新数据库中数千个条目的价格和库存
- jquery - 在客户端添加 jquery 数据表行的问题
- android - 足以生成 GeoJSON 的最小数据量?
- android - PWABuilder Android 包“找不到系统 Java 编译器”。
- powershell - 如何为网站绑定选择新安装的 SSL 证书
- angular - 胖箭头函数的这两种语法之间是否有区别,或者它们在功能上是否相同?
- python - Django 中的查询集联合
- image - 编码新手和背景图像有问题
- django - 通过 init 自定义 Django Admin 的 verbose_name,使用默认值
- spring - Whitelabel 错误页面 - 此应用程序没有 /error 的显式映射,因此您将其视为后备