0

我如何使用 VBA 使 G1 仅在范围内的任何单元格如 A4:E50 具有值时才读取?我的意图是在用户填充 A4:E50 范围内的任何单元格时禁用 G1 中的选项,这是一个下拉列表。如果用户删除了该范围内的所有值,那么 G1 中的选项才可用。我如何实现这一目标?

4

1 回答 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 回答