【问题标题】:Use VBA to render cell containing drop down list, read only if range has value使用 VBA 呈现包含下拉列表的单元格,仅当范围具有值时才读取
【发布时间】:2013-07-08 23:32:34
【问题描述】:

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

【问题讨论】:

    标签: vba excel excel-2007


    【解决方案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
    

    这不会让单元格G1 发生更改,但它的缺点是,假设您更改了很多单元格并且 G1 是其中之一,它不会让任何更改发生...在换句话说,如果 G1 是被更改的单元格之一,则不允许更改任何单元格。

    希望你没问题,否则代码会变得更加复杂和复杂......

    【讨论】:

    • 我在哪里放置 LockOneTime 子?我会将 Worksheet_Change 子放在“thisWorkbook”部分。
    • 在 VBA 中添加一个新模块并将LockOneTime 子放在那里并运行它然后你就可以摆脱它(或者只是手动解锁该工作表中除G1 之外的所有单元格) -另一个子,放入该表的代码模块 - 不是工作簿!
    • 一个问题,我在工作表中有一些锁定的单元格,这段代码会解锁这些单元格吗?我不想那样。
    • 是的,它会......这会改变一些事情......既然如此,你可能不得不以不同的方式处理这个......我正在开会,所以希望有人可以早点回复你,否则我会研究一个更好的解决方案并为你发布......
    • :) - 很高兴它成功了!!! - 记得把答案标记为你的解决方案,然后!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 2020-02-09
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多