Vba 当我删除一系列单元格(K2:K18)时,会收到一条调试消息

Vba 当我删除一系列单元格(K2:K18)时,会收到一条调试消息,vba,excel,Vba,Excel,我被其中一个VBA代码卡住了。我的要求是,当用户从数据验证中选择K行中的“辞职”选项时,他应得到一条弹出消息“请在L2列上以DD-MM-YYYY格式提供用户的最后工作日期”。这里L2只是一个例子 但是,当我通过选择范围K2:K18点击delete键时,得到一条消息“Runtime error 13,type mismatch” 请帮助解决此问题:( 下面是我的代码 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(T

我被其中一个VBA代码卡住了。我的要求是,当用户从数据验证中选择K行中的“辞职”选项时,他应得到一条弹出消息“请在L2列上以DD-MM-YYYY格式提供用户的最后工作日期”。这里L2只是一个例子

但是,当我通过选择范围K2:K18点击delete键时,得到一条消息“Runtime error 13,type mismatch”

请帮助解决此问题:(

下面是我的代码

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("K:K")) Is Nothing Then Exit Sub
If Target.Value <> "Resigned" Then Exit Sub
MsgBox "Please provide the user's Last Working Date in DD-MM-YYYY format on " & Target.Offset(0, 1).Address

End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果Intersect(目标,范围(“K:K”))为空,则退出Sub
如果目标值为“已辞职”,则退出Sub
MsgBox“请在”&Target.Offset(0,1)。地址上以DD-MM-YYYY格式提供用户的最后工作日期
端接头

您需要检查Target.Cells.Count 1是否为
,并进行适当处理

在您的例子中,您正在导致
\u Change
事件将
Target
参数作为数组的
范围(“K2:K18”)
,因此出现类型不匹配错误

下面是一个简单的例子,如果
Target
超过1个单元格范围,则中止该过程:

Private Sub Worksheet_Change(ByVal Target As Range)
    'Conditions which cause the event to terminate early, avoid errors
    If Target.Cells.Count <> 1 Then Exit Sub
    If Intersect(Target, Range("K:K")) Is Nothing Then Exit Sub

    If Target.Value = "Resigned" Then 
        MsgBox "Please provide the user's Last Working Date in DD-MM-YYYY format on " & Target.Offset(0, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)
        Application.GoTo Target.Offset(0,1)
    End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
'导致事件提前终止的条件,请避免错误
如果Target.Cells.Count为1,则退出Sub
如果Intersect(目标,范围(“K:K”))为空,则退出Sub
如果Target.Value=“辞职”,则
MsgBox“请在“&Target.Offset(0,1).Address(RowAbsolute:=False,ColumnAbsolute:=False)”上以DD-MM-YYYY格式提供用户的最后工作日期
Application.GoTo目标偏移量(0,1)
如果结束
端接头
或者,要处理多个单元格范围,可以执行以下操作:

Private Sub Worksheet_Change(ByVal Target As Range)
    'Conditions which cause the event to terminate early, avoid errors
    Dim rng As Range, cl As Range, msg as String
    Set rng = Intersect(Target, Range("K:K"))
    If rng Is Nothing Then Exit Sub

    For Each cl in rng
        If cl.Value = "Resigned" Then 
            msg = msg & vbCRLF & cl.Offset(0,1).Address(False,False)
        End If
    Next
    If msg <> vbNullString Then
        MsgBox "Please provide the user's Last Working Date in DD-MM-YYYY format on " & vbCrlf & msg
    End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
'导致事件提前终止的条件,请避免错误
Dim rng作为范围,cl作为范围,msg作为字符串
设置rng=Intersect(目标,范围(“K:K”))
如果rng为空,则退出Sub
对于rng中的每个cl
如果cl.Value=“辞职”,则
msg=msg&vbCRLF&cl.Offset(0,1).地址(假,假)
如果结束
下一个
如果msg vbNullString那么
MsgBox“请在”&vbCrlf&msg上以DD-MM-YYYY格式提供用户的最后工作日期
如果结束
端接头

如果可能的话,还有一件事,弹出消息时的消息框显示为“请以DD-MM-YYYY格式在$L$2上提供用户的最后工作日期”我们可以避免$sign@Sanoj使用
.Address(RowAbsolute:=False,ColumnAbsolute:=False)
分别从行和列中省略$。噢..大卫,你太棒了!!!:)真的,它工作得很好。我是论坛的新手,不知道如何将答案标记为“已接受”。