尽管条件未得到满足,Worksheet_change事件仍会触发

Gex*_*xas 1 excel vba excel-vba

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

我遇到的问题是,E列每次都会发生变化,尽管条件不满足(其他文本写入D列单元格).有人能指出我正确的方向,我对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
Run Code Online (Sandbox Code Playgroud)

Fun*_*mas 5

改变你If

If Target.Text = "Send request" Or Target.Text = "Start evaluation" Then
Run Code Online (Sandbox Code Playgroud)

您当前的if-Condition会抛出错误Type mismatch,但是您正在使用On Error Resume Next- message 消除所有错误.所以VBA按照你的要求做:忽略运行时错误并愉快地执行下一个语句 - 这是If-block中的语句.

一般建议:永远不要使用On Error Resume Next

  • ...除非你完全确定你知道你在做什么? (4认同)
  • @Inarion:对.我经常使用它作为缺少`try ... catch`块的解决方法.但这不是一个初学者的事情 (2认同)