繁体   English   中英

如何在 Worksheet_Change 事件中检查 Target 单元格的内容是否被删除

[英]How to check if the content of the Target cell is deleted in a Worksheet_Change Event

如果 Worksheet_Change 的目标被删除,我想删除单元格的验证或设置一个空的验证。

目标单元格是一个合并的单元格,它也有一个xlValidateList 如果我选择其中一个值,我的代码运行正常,但是当我删除此单元格的内容时,它不会更改另一个单元格的验证。

我认为它来自单元格的合并或因为它有一个xlValidateList

我试图检查IsEmpty(Target)但它总是 FALSE,即使我删除了 Target 单元格的内容

到目前为止我的代码:

Private Sub Worksheet_Change(ByVal Target As range)

Dim lengthFromCell As range
Dim lengthToCell As range

' only execute when on column F and
If Target.Column <> 6 Or Target.Cells.Count > 1 Then Exit Sub

Set lengthFromCell = Target.Offset(0, 1)
Set lengthToCell = lengthFromCell.Offset(1, 0)

' Delete contents of "length" cells
lengthFromCell.value = ""
lengthToCell.value = ""
    
    If Target.value = "A" Then
        With Target.Offset(0, 1).Validation
            .Delete
            .Add Type:=xlValidateList, _
                AlertStyle:=xlValidAlertStop, _
                Operator:=xlBetween, _
                Formula1:="1, 2, 3"
            .IgnoreBlank = True
            .InCellDropdown = True
            .ErrorTitle = ""
            .ErrorMessage = ""
            .ShowError = True
        End With
    ElseIf Target.value = "B" Then
        With Target.Offset(0, 1).Validation
            .Delete
            .Add Type:=xlValidateList, _
                AlertStyle:=xlValidAlertStop, _
                Operator:=xlBetween, _
                Formula1:="4, 5, 6"
            .IgnoreBlank = True
            .InCellDropdown = True
            .ErrorTitle = ""
            .ErrorMessage = ""
            .ShowError = True
        End With
    Else
'here either delete the validation or at least set it to 0 or ""
        With Target.Offset(0, 1).Validation
            .Delete
            .Add Type:=xlValidateList, _
                AlertStyle:=xlValidAlertStop, _
                Operator:=xlBetween, _
                Formula1:="0, 0, 0"
            .IgnoreBlank = True
            .InCellDropdown = True
            .ErrorTitle = ""
            .ErrorMessage = ""
            .ShowError = True
        End With
    End If
End Sub

编辑:

“目标”是来自Worksheet_Change的目标,其类型为Range 所以它是合并的单元格,其中包含值为“A 和 B”的下拉列表。

细胞图片

主要问题是我的代码无法识别合并单元格中值“A”的删除,但在单个单元格中它可以识别。

请尝试下一个功能:

Function isMergeEmpty(rng As Range) As Boolean
   Dim x As String
   On Error Resume Next
      x = rng.value
      If err.Number <> 0 Then
            isMergeEmpty = True
      End If
    On Error GoTo 0
End Function

可以通过这种方式从事件中调用它:

Private Sub Worksheet_Change(ByVal Target As Range)
    If isMergeEmpty(Target) Then 
        'do here what you need...
        MsgBox "Empty merge cell..."
    End if
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM