我写了这段代码。我不明白为什么我得到错误:结束如果没有阻止如果
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子句未被省略。我不明白为什么我得到错误
答案 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