如果无法识别原始 if 语句,则结束并不断给出编译错误 [已关闭]

End if not recognizing the original if statement and keeps giving a compile error [closed]

提问人:DuWayne Brown 提问时间:8/31/2023 最后编辑:AndreasDuWayne Brown 更新时间:8/31/2023 访问量:37

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

3个月前关闭。

我是编码新手,当我去运行代码时,我不断收到编译错误“End If without block if”。以下是我所拥有的。

Sub CompareAndFormatWithGradient()
Dim rateChart1 As Range
Dim rateChart2 As Range
Dim cell1 As Range
Dim cell2 As Range
Dim ws As Worksheet

' Set the worksheet where the data is located
Set ws = Worksheets("Rolling Data Ranked")

' Set the ranges for the two charts
Set rateChart1 = ws.Range("E56:Q56")
Set rateChart2 = ws.Range("W56:AI56")

' Loop through each cell to format
    For Each cell1 In rateChart1
        For Each cell2 In rateChart2
            If cell1.Value > cell2.Value Then
                With cell1.Interior  'Start Gold
                    .Pattern = xlPatternLinearGradient
                    .Gradient.Degree = 45
                    .Gradient.ColorStops.Clear
                End With
                With cell1.Interior.Gradient.ColorStops.Add(0)
                    .Color = 49407
                    .TintAndShade = 0
                End With
                With cell1.Interior.Gradient.ColorStops.Add(1)
                    .Color = 65535
                    .TintAndShade = 0
                End With ' End Gold
                With cell2.Interior ' Start Silver
                    .Pattern = x1PatternLinearGradient
                    .Gradient.Degree = 45
                    .Gradient.ColorStops.Clear
                End With
                With cell2.Interior.Gradient.ColorStops.Add(0)
                    .Color = RGB(128, 128, 128)
                    .TintAndShade = 0
                End With
                With cell2.Interior.Gradient.ColorStops.Add(1)
                    .Color = RGB(0, 0, 0)
                    .TintAndShade = 0
                End With ' End Silver
            ElseIf cell1.Value < cell2.Value Then
                With cell1.Interior ' Start Silver
                    .Pattern = x1PatternLinearGradient
                    .Gradient.Degree = 45
                    .Gradient.ColorStops.Clear
                End With
                With cell1.Interior.Gradient.ColorStops.Add(0)
                    .Color = RGB(128, 128, 128)
                    .TintAndShade = 0
                End With
                With cell1.Interior.Gradient.ColorStops.Add(1)
                    .Color = RGB(0, 0, 0)
                    .TintAndShade = 0
                With cell1.Interior  'Start Gold
                    .Pattern = xlPatternLinearGradient
                    .Gradient.Degree = 45
                    .Gradient.ColorStops.Clear
                End With
                With cell1.Interior.Gradient.ColorStops.Add(0)
                    .Color = 49407
                    .TintAndShade = 0
                End With
                With cell1.Interior.Gradient.ColorStops.Add(1)
                    .Color = 65535
                    .TintAndShade = 0
                End With
            End If
        Next cell2
    Next cell1
End Sub

我尝试添加和删除结尾 if 语句,但它要么弹出相同的错误,要么说下一个没有 for

Excel VBA IF-语句

评论

1赞 JohnM 8/31/2023
With cell1.Interior.Gradient.ColorStops.Add(1)缺少一个End With

答:

1赞 Notus_Panda 8/31/2023 #1

没有尽头

        With cell1.Interior.Gradient.ColorStops.Add(1)
            .Color = RGB(0, 0, 0)
            .TintAndShade = 0
        With cell1.Interior  'Start Gold
2赞 JohnM 8/31/2023 #2

您有 2 个问题,导致编译错误的问题是缺少 .With cell1.Interior.Gradient.ColorStops.Add(1)End With

其次,我猜你没有使用(在模块的顶部......您应该始终使用它,否则 VBA 只是向您隐藏问题),因此您没有检测到您正在使用的两个地方(第二个字符是数字“1”)而不是(第二个字符是字母“l”)Option Explicitx1PatternLinearGradientxlPatternLinearGradient

评论

0赞 Notus_Panda 8/31/2023
啊好抓,在分区时甚至没有看到缺少的“结束......”