结束如果没有阻止如果错误

时间:2016-05-13 09:47:21

标签: vba excel-vba excel

我写了这段代码。我不明白为什么我得到错误:结束如果没有阻止如果

Sub mytest()

Dim i As Integer
Dim s As Integer
Dim j As Integer
Dim p As Integer
Dim k As Integer
s = 0

With Worksheets("mysheet")
.Range("B28:B75").Select

For i = 28 To 75
        If Cells(i, 2).Value > 0 Then Cells(i, 2).Interior.Color = RGB(255, 255, 255)
        s = s + 1
        End If
Next i

.Range("A28:A75").Select

For j = 28 To 75

    If Cells(i, 2).Value = 0 Then Cells(i, 2).Interior.Pattern = xlPatternLightDown
    Cells(i, 2).Interior.Color = RGB(255, 255, 255)
    End If

Next j

p = 75 - s
For k = 1 To s
    Cells(s + k, 1).Interior.Color = RGB(18, 0, 0)
Next k

End With

End If子句未被省略。我不明白为什么我得到错误

2 个答案:

答案 0 :(得分:4)

如果你在一行上写一个If语句:

If Foo = Bar Then FooBar()

您不需要使用End If,因为操作在同一行执行,因此语句的结尾是隐含的(编译器在{之后知道任何事情)同一行上的{1}}是有条件的,因此您无需告诉其条件代码的结束位置)

如果您将操作放在单独的一行:

Then

然后你必须明确地告诉编译器使用If Foo = Bar Then FooBar() End If 结束条件代码的位置,因为没有其他方法可以知道。

答案 1 :(得分:1)

在新行上移动Then后的语句。如果你在那之后使用代码,恕我直言VBA期望单行语句,所以下一行代码没有end if会抛出此错误。我还建议您阅读有关VBA here的更多信息,以获得更好的范围和单元规范。

但是对于你的错误使用类似的东西

Sub mytest()

Dim i As Integer
Dim s As Integer
Dim j As Integer
Dim p As Integer
Dim k As Integer
s = 0

With Worksheets("mysheet")
.Range("B28:B75").Select

For i = 28 To 75
        If Cells(i, 2).Value > 0 Then
        Cells(i, 2).Interior.Color = RGB(255, 255, 255)
        s = s + 1
        End If
Next i

.Range("A28:A75").Select

For j = 28 To 75

    If Cells(i, 2).Value = 0 Then
    Cells(i, 2).Interior.Pattern = xlPatternLightDown
    Cells(i, 2).Interior.Color = RGB(255, 255, 255)
    End If

Next j

p = 75 - s
For k = 1 To s
    Cells(s + k, 1).Interior.Color = RGB(18, 0, 0)
Next k

End With