【问题标题】:Remove Validation Rules Row by Row from Sheet Based on Column G Value根据 G 列值从工作表中逐行删除验证规则
【发布时间】:2019-04-25 16:04:05
【问题描述】:

各位专家,我正在使用一个包含多列的 Excel 工作表。每列都有验证规则。我想在选择整个工作表中的任何行时删除这些验证规则。当我选择行时,我将从下拉菜单中将值放入 G 中。根据列 G 值,应清除整个行验证规则。单子看起来像这样。

enter image description here

我使用的代码如下。

Sub RemoveDV()
    Dim ws As Worksheet
    For Each ws In Worksheets
        ws.Cells.Validation.Delete
    Next ws
    MsgBox ("All Validation Rules has been removed successfully")

End Sub

它工作正常,但它删除了整个工作表。但我想删除我正在处理的仅验证行。

谢谢

【问题讨论】:

    标签: excel


    【解决方案1】:

    试试这个:

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
        Debug.Print Target.Address
        If Not Intersect(Target, Range("G:G")) Is Nothing And Target.Count = 1 Then
            If Target.Value = "The value that will trigger the validation clearing" Then
                Target.EntireRow.Validation.Delete
            End If
        End If
    End Sub
    

    只要您更改指定工作表的“G”列中的值并且新值 = 您想要的文本,就会触发。

    编辑:

    假设您将值(将触发脚本的值)存储在同一页面上的某个范围内,您可以根据需要调整以下代码:

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Arr: Arr = Application.Transpose(Range("$P$1:$P$12").Value) 'Values stored in "P1:P12"
        If Not Intersect(Target, Range("G:G")) Is Nothing And Target.Count = 1 Then
            If UBound(Filter(Arr, Target.Value)) > -1 Then
                Target.EntireRow.Validation.Delete
            End If
        End If
    End Sub
    

    【讨论】:

    • @O.PAL 感谢兄弟的工作。现在我想使用 Target.Value 作为动态范围,因为我在 G 列中有一个下拉列表。是否可以使用多个关键字而不是单个关键字。或从指定列表动态获取工作。再次感谢
    猜你喜欢
    • 2022-12-09
    • 2023-03-20
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多