Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 工作表\u更改事件触发器,尽管条件未满足_Vba_Excel - Fatal编程技术网

Vba 工作表\u更改事件触发器,尽管条件未满足

Vba 工作表\u更改事件触发器,尽管条件未满足,vba,excel,Vba,Excel,我有一个标记D列单元格更改时间的函数。现在,我想在工作表_change事件中添加另一个函数,如果在D列单元格中写入特定文本,该函数将相应地更改E列 我遇到的问题是,E列每次都会更改,尽管条件不满足(其他文本写入D列单元格)。有人能给我指出正确的方向吗?我对VBA很陌生,所以我可能错过了什么 我的代码: Private Sub Worksheet_Change(ByVal Target As Range) Dim xCellColumn As Integer Dim xTimeColumn As

我有一个标记D列单元格更改时间的函数。现在,我想在工作表_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
Private子工作表\u更改(ByVal目标作为范围)
Dim Xcell列为整数
Dim xTimeColumn作为整数
Dim xPaymentColumn为整数
Dim xRow,xCol为整数
xcell列=4
xTimeColumn=23
xPaymentColumn=5
'标记日期的零件,按预期工作
出错时继续下一步
xRow=Target.Row
xCol=Target.Column
如果是Target.Text“”,则
如果xCol=xcell列,则
单元格(xRow,xTimeColumn)=现在()
如果结束
如果结束
'根据D列选择更改E列的部分
'我希望此部分仅在D列中的文本单元格发生更改时触发_
“发送请求”或“开始评估”,如果D列中有任何其他文本_
E列应保持完整
如果Target.Text=“发送请求”或“开始评估”,则
如果xCol=xcell列,则
单元格(xRow,xPaymentColumn)=“是”
如果结束
如果结束
端接头

如果将
更改为

If Target.Text = "Send request" Or Target.Text = "Start evaluation" Then
您当前的if条件引发了一个错误
类型不匹配
,但您正在通过错误恢复下一条
消息吃掉所有错误。因此VBA会按照您的要求执行:忽略运行时错误并愉快地执行下一条语句,即If块中的语句


一般建议:切勿在出现错误时使用
下一步继续

如果
更改为

If Target.Text = "Send request" Or Target.Text = "Start evaluation" Then
您当前的if条件引发了一个错误
类型不匹配
,但您正在通过错误恢复下一条
消息吃掉所有错误。因此VBA会按照您的要求执行:忽略运行时错误并愉快地执行下一条语句,即If块中的语句


一般建议:切勿在下一步错误恢复时使用

“即使条件不满足,E列仍会更改”-您能更具体一点吗?对于初学者,请尝试在“下一步继续”错误时注释出
。在我看来还可以,不过您应该在更改代码中的单元格之前关闭enableevents。列E中的文本单元格将更改为“是”,尽管事实上,列D中的文本已更改为“发送请求”或“开始评估”以外的内容。我只想更改E列,然后将这两个短语中的一个输入D列单元格。我将更新我的问题,使之更清楚。“尽管条件不满足,E列仍会更改”-你能更具体一点吗?对于初学者,请尝试在“下一步继续”错误时注释出
。在我看来还可以,不过您应该在更改代码中的单元格之前关闭enableevents。列E中的文本单元格将更改为“是”,尽管事实上,列D中的文本已更改为“发送请求”或“开始评估”以外的内容。我只想更改E列,然后将这两个短语中的一个输入D列单元格。我会更新我的问题使之更清楚……除非你绝对确定你知道自己在做什么?@Inarion:对。我经常使用它作为缺少
try…catch
块的变通方法。但这并不是一个初学者的错误,
显示警报
和没有显式的
选项
可能需要被锁定在某种“专家用户模式”的后面-它可以防止这么多问题。。。xD…除非你绝对确定自己知道自己在做什么?@Inarion:对。我经常使用它作为缺少
try…catch
块的变通方法。但这并不是一个初学者的错误,
显示警报
和没有显式的
选项
可能需要被锁定在某种“专家用户模式”的后面-它可以防止这么多问题。。。除息的