首页 > 解决方案 > 尽管条件不满足,Worksheet_change 事件仍会触发

问题描述

我有标记 D 列单元格更改时间的功能。现在我想向 worksheet_change 事件添加另一个函数,如果在 D 列单元格中写入特定文本,它将相应地更改 E 列。

我遇到的问题是,尽管条件不满足(其他文本写入 D 列单元格),但 E 列每次都会更改。有人可以指出我正确的方向吗,我对 VBA 很陌生,所以也许我错过了一些东西。

我的代码:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim xCellColumn As Integer
Dim xTimeColumn As Integer
Dim xPaymentColumn As Integer
Dim xRow, xCol As Integer

xCellColumn = 4
xTimeColumn = 23
xPaymentColumn = 5

'part for marking date, works as intended
On Error Resume Next
xRow = Target.Row
xCol = Target.Column

If Target.Text <> "" Then
    If xCol = xCellColumn Then
       Cells(xRow, xTimeColumn) = Now()
    End If
End If

'part for changing column E according column D selection 
'I would like this part to trigger only if text cell in column D changed _
 to "Send request" or "Start evaluation", if any other text is written in column D, _
  column E should remain intact

If Target.Text = "Send request" Or "Start evaluation" Then
    If xCol = xCellColumn Then
        Cells(xRow, xPaymentColumn) = "Yes"
    End If
End If
End Sub

标签: vbaexcel

解决方案


改变你If

If Target.Text = "Send request" Or Target.Text = "Start evaluation" Then

您当前的 if-Condition 抛出一个错误Type mismatch,但是您正在使用On Error Resume Next- 消息吃掉所有错误。因此 VBA 会按照您的要求执行:忽略运行时错误并愉快地执行下一条语句 - 这是 If 块中的语句。

一般建议:切勿使用On Error Resume Next


推荐阅读