【问题标题】:VBA code to not allow user to select a cell with certain textVBA代码不允许用户选择带有特定文本的单元格
【发布时间】:2019-01-31 23:34:05
【问题描述】:

我正在制作一个电子表格以复制前一天的用户数据,然后删除所有数值但保留带有“NA”的单元格。我想要的是用户无法更改/删除其中仍有“NA”的单元格。如果选择了某个单元格(基于行和列),我发现了一些使用 OFFSET 向下移动一个单元格的代码,但是我无法弄清楚如果当前单元格如何使用 OFFSET 向下移动一个单元格包含“NA”。 (https://www.extendoffice.com/documents/excel/3820-excel-lock-cell-without-protecting-sheet.html) 此工作表已被 Quality-set 密码锁定,因此我无法解锁电子表格,然后选择要锁定的“NA”单元格,然后重新锁定电子表格,从而寻找广告素材防止单元格被选中或更改的方法。此外,代码需要一直运行,而不仅仅是在选择运行宏时。有什么想法吗?

【问题讨论】:

  • 创建一个工作表更改事件并使用.Find 检查目标范围是否包含" NA"。如果是这样 > 做点什么!

标签: excel vba


【解决方案1】:

如果用户可以在未启用宏的情况下打开这本书,那么我不确定您的要求是否可行。

如果您可以假设宏已启用,您可以使用事件来阻止用户选择单元格(类似于您提到的 OFFSET),或者您可以手动跟踪更改到隐藏选项卡上,以记录更改并处理你认为合适的。实现后者的方法有很多,只要搜索“VBA tracking changes to a sheet”等即可。

这就是您使用 OFFSET 方法的方式:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells(1, 1).Text = "NA" Then
        Beep
        Cells(Target.Row, Target.Column).Offset(0, 1).Select
    End If
End Sub

请记住,这是一种非常简单的方法。它不会阻止用户选择多个单元格(一个范围)并删除内容。它也不会阻止将值粘贴到包含“NA”的范围内。

更新: 以下是一个改进版本,如果其中一个单元格包含“NA”,至少可以防止用户选择多个单元格(用于粘贴或删除)。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim testarea As Range
    Set testarea = Intersect(UsedRange, Target.Cells)
    If Not (testarea Is Nothing) Then
        Application.EnableEvents = False
        For Each cell_to_check In Intersect(UsedRange, Target.Cells)
            If cell_to_check.Text = "NA" Then
                Beep
                Cells(cell_to_check.Row, cell_to_check.Column).Offset(0, 1).Select
                Do Until Selection.Text <> "NA"
                    Selection.Offset(0, 1).Select
                Loop
                Exit For
            End If
        Next
        Application.EnableEvents = True
    End If
End Sub

但是,这仍然存在一些缺陷,因为仍然可以将其他区域的单元格拖动到包含“NA”的单元格上。

【讨论】:

  • 如果用户选择了一系列单元格会怎样
  • 因此是我的最后一段,@JvdV。我只是在研究一种可以解决这个问题的替代方案。
  • 酷!我只是在想,也许在打开工作簿时使用 findnext 锁定包含 NA 的单元格行上的东西?也许这很有用
  • @JvdV 提供了改进......是的,我知道它仍然不完美。 ;-)
  • 我认为 OP 提到锁定单元(和所需的保护)被排除在潜在的解决方案之外......?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
相关资源
最近更新 更多