Excel 用一些vba代码编写,遇到了死胡同!获取错误end block end if而没有end if

Excel 用一些vba代码编写,遇到了死胡同!获取错误end block end if而没有end if,excel,vba,dashboard,Excel,Vba,Dashboard,我正在创建一个仪表板。我有两种形状,椭圆形1和椭圆形2。它们将根据特定单元格的值更改颜色 我得到一个错误: 无终止if的阻塞if 我做错了什么 Sub Worksheet_Change(ByVal Target As Range) ' If Intersect(Target, Range("E10")) Is Nothing Then Exit Sub If Target.Value >= -0.1 And Target.Value <= 0.1 Then

我正在创建一个仪表板。我有两种形状,椭圆形1和椭圆形2。它们将根据特定单元格的值更改颜色

我得到一个错误:

无终止if的阻塞if

我做错了什么

Sub Worksheet_Change(ByVal Target As Range)
'
    If Intersect(Target, Range("E10")) Is Nothing Then Exit Sub

        If Target.Value >= -0.1 And Target.Value <= 0.1 Then
            ActiveSheet.Shapes.Range(Array("Oval 1")).Select
                With Selection.ShapeRange.Fill
                .ForeColor.RGB = RGB(0, 176, 80)
                End With
        ElseIf Target.Value >= -0.29 And Target.Value < 0.29 Then
            ActiveSheet.Shapes.Range(Array("Oval 1")).Select
                With Selection.ShapeRange.Fill
                .ForeColor.RGB = RGB(255, 255, 0)
                End With
        Else
             ActiveSheet.Shapes.Range(Array("Oval 1")).Select
                With Selection.ShapeRange.Fill
                .ForeColor.RGB = RGB(255, 0, 0)

                End With



        If Intersect(Target, Range("N10")) Is Nothing Then Exit Sub

        If Target.Value >= -0.1 And Target.Value <= 0.1 Then
            ActiveSheet.Shapes.Range(Array("Oval 2")).Select
                With Selection.ShapeRange.Fill
                .ForeColor.RGB = RGB(0, 176, 80)
                End With
        ElseIf Target.Value >= -0.29 And Target.Value < 0.29 Then
            ActiveSheet.Shapes.Range(Array("Oval 2")).Select
                With Selection.ShapeRange.Fill
                .ForeColor.RGB = RGB(255, 255, 0)
                End With
        Else
             ActiveSheet.Shapes.Range(Array("Oval 2")).Select
                With Selection.ShapeRange.Fill
                .ForeColor.RGB = RGB(255, 0, 0)
                End With

    End If


    Range("A1").Select
End Sub
重构:

Sub Worksheet_Change(ByVal Target As Range)

    If Target.CountLarge > 1 Then Exit Sub

    If Not Intersect(Target, Me.Range("E10")) Is Nothing Then
        Me.Shapes.Range("Oval 1").ShapeRange.Fill.ForeColor.RGB = ValueColor(Target.Value)
    End If

    If Not Intersect(Target, Me.Range("N10")) Is Nothing Then
        Me.Shapes.Range("Oval 2").ShapeRange.Fill.ForeColor.RGB = ValueColor(Target.Value)
    End If

End Sub

Function ValueColor(v) As Long
    Dim rv As Long
    If v > -0.1 And v <= 0.1 Then
        rv = RGB(0, 176, 80)
    ElseIf v.Value >= -0.29 And v.Value < 0.29 Then
        rv = RGB(255, 255, 0)
    Else
        rv = RGB(255, 0, 0)
    End If
    ValueColor = rv
End Function

如果在IntersectTarget之前,RangeN10什么都不是,那么退出Sub,您就错过了一个结束。这也要求进行一些重构。有大量重复的代码。。此外,正确缩进代码有助于避免此类错误。请看我添加到End If,它使错误消失,但仍然无法工作。一个形状会根据值改变颜色,第二个不会。我上学期刚开始学习,我相信代码可能会很多better@OscarNuñez-如果代码不起作用,请逐行调试,看看它所采取的行为与您所期望的不同。