我有以下代码,我认为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
答案 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
...