ElseIf覆盖先前if

时间:2018-02-08 13:06:13

标签: excel vba if-statement

我有以下代码,我认为ElseIf检查与初始If相同的单元格,并覆盖最初If更改的单元格。我认为这与条件的差异有关(字符串检查与rowheight)。

非常感谢任何提出问题的输入。

编辑:所以它会覆盖它。有关如何不覆盖的任何提示?       两个方程式都可以是真的。所以我不想那些真实的       第一个被排除在第二个之外。

Dim row As Long
row = 2
Const colSelected As Long = 67, belang As Long = 71, colPref1 As Long = 74, _ 
colPref2 As Long = 78, colPref3 As Long = 82

Set rngOutput = WsStam.Range("FC2") 
Set opmerking = WsStam.Range("FB2")
With WsStam 
    lastRowInput = .Cells(.Rows.Count, colSelected).End(xlUp).row 

    Do Until row > lastRowInput 

        If .Cells(row, belang).Value = "Nee" Then
            rngOutput.Value = 0
            opmerking.Value = "Geen Belangstelling"

        ElseIf .Cells(row, colSelected).RowHeight > 0 Then   

            Select Case .Cells(row, colSelected).Value 
                Case .Cells(row, colPref1).Value 
                    rngOutput.Value = 0
                Case .Cells(row, colPref2).Value 
                    rngOutput.Value = 1
                    opmerking.Value = Voorkeur2
                Case .Cells(row, colPref3).Value 
                    rngOutput.Value = 1
                    opmerking.Value = Voorkeur3
                Case Else
                    rngOutput.Value = 1
                    opmerking.Value = "Functiereeks"

            End Select

            Set rngOutput = rngOutput(2) 
            Set opmerking = opmerking(2)

        End If

        row = row + 1 

    Loop

End With

1 个答案:

答案 0 :(得分:1)

这两行应该低于End If吗?

Set rngOutput = rngOutput(2) 
Set opmerking = opmerking(2)

否则是,您可以继续前进的唯一时间是进入Else If状态。这可能会让您觉得Else If覆盖了您的初始If

P.S。使用rngOutput.Offset(1,0)而不是rngOutput(2)更为常见 - 如果没有别的,那么实际发生的事情就更清楚了。

进一步讨论。看下面的代码。如果你迭代两次并且第一次满足IF条件但是第二次不满足但是ElseIf条件是。

Do Until row > lastRowInput 
    If .Cells(row, belang).Value = "Nee" Then
        opmerking.Value = "IF"
    ElseIf .Cells(row, colSelected).RowHeight > 0 Then   
        opmerking.Value = "ELSEIF"
        Set opmerking = opmerking.Offset(1,0)
    End If
    row = row + 1 
Loop

opermerking的值设置为“IF”,但第二次循环并且ElseIf条件满足时将设置为“ELSEIF”。该值已覆盖

这是因为您只在满足ElseIf命令后更改opermerking的范围引用。结果是这样的:

ELSEIF
ELSEIF
...

另一方面,这会在每次循环时更改opmerking的范围参考:

Do Until row > lastRowInput 
    If .Cells(row, belang).Value = "Nee" Then
        opmerking.Value = "IF"
    ElseIf .Cells(row, colSelected).RowHeight > 0 Then   
        opmerking.Value = "ELSEIF"
    End If
    Set opmerking = opmerking.Offset(1,0) '<-- this moved outside the If...End If
    row = row + 1 
Loop

所以你的输出是这样的:

IF
ELSEIF
ELSEIF
IF
...