![](/img/trans.png)
[英]Excel-VBA - How to identify Target range (more than 1 cell) is deleted in a Worksheet_Change function?
[英]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.