我如何使用 VBA 使 G1 仅在范围内的任何单元格如 A4:E50 具有值时才读取?我的意图是在用户填充 A4:E50 范围内的任何单元格时禁用 G1 中的选项,这是一个下拉列表。如果用户删除了该范围内的所有值,那么 G1 中的选项才可用。我如何实现这一目标?
问问题
1058 次
1 回答
1
这是我刚刚想出的一个快速解决方案......不漂亮,但它会成功:
首先只运行一次这个宏:
Sub LockOneTime()
ActiveSheet.Cells.Locked = False
ActiveSheet.Range("G1").Locked = True
End Sub
然后将其放入您的工作表代码中:
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.WorksheetFunction.CountA(Range("A1:E40")) > 0 Then
ActiveSheet.Protect contents:=True
Else
ActiveSheet.Protect contents:=False
End If
End Sub
这是一种快速而肮脏的方式来获得您想要实现的目标......
编辑基于其他单元格被锁定:
鉴于您不能使用工作表保护来实现您的目标,只需将此代码放在工作表的代码模块中(您不再需要第一个LockOneTime
宏):
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, Range("G1")) Is Nothing) Then
If Application.WorksheetFunction.CountA(Range("A4:E50")) > 0 Then
Application.EnableEvents = False
MsgBox "You cannot change the value in cell G1"
Application.Undo
Application.EnableEvents = True
End If
End If
End Sub
这不会让 cell 发生变化G1
,但它的缺点是,假设您更改了很多单元格并且 G1 是其中之一,它不会让任何更改发生......换句话说,如果 G1 是其中一个单元格被更改,则不允许更改任何单元格。
希望这对你来说没问题,否则,代码会变得更加复杂和复杂......
于 2013-07-08T14:31:30.613 回答