错误:没有if

时间:2014-01-06 11:51:54

标签: excel-vba vba excel

我正在努力建立费用与收入优势并得到这个恼人的错误 “否则没有” 我去了不同的论坛和其他论坛,但无法得到答案 - 这让我发疯了

一点解释:我正在查看一张名为“data”的表格,如果我发现一个非空白或没有“0”的单元格,我会继续。第一个“每个”用于类别,第二个用于子类别 - 一旦我找到一个子类别,我搜索我们在该子类别下制作的成本。我在月份表中查找他的名字在字符串CSheet中的成本 - 当我找到它们时,我将它们添加到计数器scSum。

With Worksheets("Data")
       For Each Mcell In Worksheets("Data").Range(.Cells(CatRow, stCatCol), .Cells(CatRow, enCatCol)).Cells '("C1:X1") expenses
           scSum = 0
          If Mcell.Value <> 0 Then
                   If IsEmpty(Mcell.Value) Then Exit For
                   Else
                            For Each eScell In Worksheets("Data").Range(.Cells(CatRow + 1, Mcell.Column), .Cells(CatRow + noSubCat, Mcell.Column)).Cells 'run on sub category
                           'eScell - expence category cell
                               If IsEmpty(eScell.Value) Then Exit For
                               Else ***'error!***
                               subC = eScell.Value
                                  With Worksheets(CSheet)
                                      For Each eCcell In Worksheets(CSheet).Range(.Cells(ExpMonthStRow, ExpMonthSubCol), .Cells(MonthEndRow, ExpMonthSubCol)).Cells 'run in month and look for sub category expences
                                         'eCcell - expence cost cell
                                          If IsEmpty(eCcell.Value) Then Exit For
                                          Else
                                              If eCcell.Value = subC Then
                                                  scSum = scSum + Worksheets(CSheet).Cells(eCcell.row, ExpMonthSubCostCol)
                                              End If
                                          End If
                                      Next eCcell
                                  End With
                               End If
                            Next eScell
                    End If
        'incomes
        scSum = 0
            End If
        Next Mcell
End With

2 个答案:

答案 0 :(得分:4)

THEN之后的VB中,您必须转到新行,否则隐式关闭IF

您可以在SO上与其他问题进行比较:

VBA: Else without If Error

答案 1 :(得分:1)

找到违规End If的最佳方法是Indent您的代码。 :)

您可以通过以下方式撰写IF-Endif

多个语句

If <Condition> Then 
    <Do Something>
Else
    <Do Something Else>
End If

If <Condition1> Then
    <Do Something>
ElseIf <Condition2> Then
    <Do Something Else>
Else
    <Do Something Else>
End If

单一陈述

If <Condition> Then 
    <Do Something>
End If

以上陈述也可以写成一行

If <Condition> Then <Do Something>

在这种情况下,您不需要End If

上面的代码(删除其他代码以进行演示后)可以写成如下所示。我删除了额外的代码来证明我的意思。在下面的代码中,不需要以*开头的所有行。

If Mcell.Value <> 0 Then
    If IsEmpty(Mcell.Value) Then Exit For
Else
    If IsEmpty(eScell.Value) Then Exit For
    *Else
    If IsEmpty(eCcell.Value) Then Exit For
    *Else
    If eCcell.Value = subC Then
        scSum = scSum + Worksheets(CSheet).Cells(eCcell.Row, ExpMonthSubCostCol)
    End If

    *End If
    *End If
    *End If
End If