Vba 如果条件范围不存在';行不通

Vba 如果条件范围不存在';行不通,vba,excel,Vba,Excel,当您复制A、C和D列中的粘贴值时,我无法使下面的代码正常工作。例如,如果我在第2行,并且我在单元格A2、C2和D2中插入数据,则代码会执行其任务。但是如果复制第3、4、5行中的粘贴数据,代码将不再检查条件。如果有人能帮我解决这件事,我将不胜感激。谢谢 Sub LogicalPart(i As Long) If (Cells(i, "C") + Cells(i, "D")) <> Cells(i, "A") Then MsgBox "C" & i &a

当您复制A、C和D列中的粘贴值时,我无法使下面的代码正常工作。例如,如果我在第2行,并且我在单元格A2、C2和D2中插入数据,则代码会执行其任务。但是如果复制第3、4、5行中的粘贴数据,代码将不再检查条件。如果有人能帮我解决这件事,我将不胜感激。谢谢

Sub LogicalPart(i As Long)

    If (Cells(i, "C") + Cells(i, "D")) <> Cells(i, "A") Then
        MsgBox "C" & i & " + D" & i & " must equal cell A" & i & " which is: " & Range("A" & i).Value
        MsgBox ("Please insert again the data in cell C" & i & " or D " & i & "!")
        Cells(i, "C").Interior.Color = RGB(255, 0, 0)
        Cells(i, "D").Interior.Color = RGB(255, 0, 0)

Else
       Range(Cells(i, "C"), Cells(i, "D")).Interior.Color = RGB(1000, 1000, 1000)
    End If

End Sub



Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Range("C1:d10"), Target) Is Nothing Then
   LogicalPart Target.row
End If


End Sub
子逻辑部分(i等长)
如果(单元格(i,“C”)+单元格(i,“D”))单元格(i,“A”),则
MsgBox“C”&i&“+D”&i&”必须等于单元格A“&i&”,即:“&Range”(“A”&i).Value
MsgBox(“请在单元格C”&i&“或D”&i&“!”中再次插入数据”)
单元格(i,“C”).Interior.Color=RGB(255,0,0)
单元格(i,“D”).Interior.Color=RGB(255,0,0)
其他的
范围(单元格(i,“C”)、单元格(i,“D”))。Interior.Color=RGB(100010001000)
如果结束
端接头
私有子工作表_更改(ByVal目标作为范围)
如果不是,则Application.Intersect(范围(“C1:d10”),Target)什么都不是
LogicalPart目标行
如果结束
端接头

您需要迭代目标范围内的行:

Target.Row
将仅返回第一行,而不是所有行:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Dim rngrow As Range
Set rng = Intersect(Range("C1:d10"), Target)
If Not rng Is Nothing Then
    For Each rngrow In rng.Rows
        LogicalPart rngrow.Row
    Next rngrow
End If


End Sub

您需要迭代目标范围内的行:

Target.Row
将仅返回第一行,而不是所有行:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Dim rngrow As Range
Set rng = Intersect(Range("C1:d10"), Target)
If Not rng Is Nothing Then
    For Each rngrow In rng.Rows
        LogicalPart rngrow.Row
    Next rngrow
End If


End Sub

根据您输入数据的方式,您的代码可能存在一些问题,但是请更清楚地解释这个问题,因为它适用于我,正如您的问题陈述中所述。此外,您是否调试了代码(逐行调试)以观察实际行为与预期行为。如果一次更改多个单元格,则此操作将不起作用。您将需要遍历Target.rowsys,例如,如果我在第1行中,则代码可以工作,并按以下顺序插入值:A1=即12、C1=即10和D1=即3。由于C1+D1不等于A1,我将收到错误。但是,如果复制粘贴A1、C1和D1中的值并将它们粘贴到第2行、第3行和第4行中,则错误将仅显示在第2行中,而不会显示在第3行和第4行中。我希望它们也能在那些玫瑰上表现出来。感谢@Scott Holtzman在处理多行更改时,可能想添加一种方法来抑制
Msgbox
s。根据您输入数据的方式,您的代码可能会出现一些问题,但请更清楚地解释这个问题,因为它对我来说很有效,正如您在问题陈述中所述。此外,您是否调试了代码(逐行调试)以观察实际行为与预期行为。如果一次更改多个单元格,则此操作将不起作用。您将需要遍历Target.rowsys,例如,如果我在第1行中,则代码可以工作,并按以下顺序插入值:A1=即12、C1=即10和D1=即3。由于C1+D1不等于A1,我将收到错误。但是,如果复制粘贴A1、C1和D1中的值并将它们粘贴到第2行、第3行和第4行中,则错误将仅显示在第2行中,而不会显示在第3行和第4行中。我希望它们也能在那些玫瑰上表现出来。感谢@Scott Holtzman在处理多行更改时,可能需要添加一种方法来抑制
Msgbox
s。