IF声明的第一部分被忽略

我在VBA中有下面的IF语句,但是语句的“删除”部分或者ElseIf之前的那个部分被完全忽略了:

For i = 3 To (customerNum + 3) If Sheets("Reports").Range("L" & i).Value = "A" Then Sheets("Reports").Range("G" & i & ":M" & i).Select Selection.Delete Shift:=xlUp ElseIf Sheets("Reports").Range("L" & i).Value <> "A" Then Sheets("Reports").Range("J" & i).Value = form1_1 & i & form1_2 Sheets("Reports").Range("J" & i).NumberFormat = "d-mmm-yy" Sheets("Reports").Range("M" & i).Value = form2_1 & i & form2_2 & i Sheets("Reports").Range("M" & i).NumberFormat = "_-[$£-809]* #,##0.00_-;-[$£-809]* #,##0.00_-;_-[$£-809]* ""-""??_-;_-@_-" End If Next i 

其余的运行顺利。 没有崩溃或错误。

有任何想法吗?

这不是(!)应该是一个额外的答案。 然而,我想补充一点,这是因为(偶尔)我在一张Excel表格中遇到了各种不同的“A”或“C”等问题。 在大公司工作的时候,我有一些同事一起工作多个不同的字符集(他们的本地字符集和英文字符集)。 请注意,西里尔文的“A” looks像拉丁文的“A”。 然而,即使使用Option Compare Text ,两者也是不同的。 下面的代码将揭示一个字符的Unicode,并可能是一个更好的方法来检查是否已经进入一个特定的单元格“A”:

 Public Sub CheckUnicode() Dim lngRowNumber As Long Debug.Print AscW("A") With Sheets("Reports") For lngRowNumber = 1 To 100000 If Trim(.Range("L" & lngRowNumber).Value2) = vbNullString Then Exit For Debug.Print AscW(Left(.Range("L" & lngRowNumber).Value2, 1)) Next lngRowNumber ' The following will append a cyrillic a to the bottom of the sheet in Column "A" .Range("A" & lngRowNumber + 1).Value2 = ChrW(1072) End With End Sub 

对于可能遇到类似问题的其他人,我只是补充了这个“解决scheme”。 如前所述,有几个字符看起来相似,但没有。 还要注意,这只是西里尔字母。 那里可能还有其他的字符集看上去很像。

也许你需要从底部开始,然后上升。

 Sub Button1_Click() Dim sh As Worksheet Dim Rws As Long, rng As Range, nwrw As Long Set sh = Sheets("Reports") With sh Rws = .Cells(.Rows.Count, "L").End(xlUp).Row For i = Rws To 3 Step -1 If .Cells(i, "L") = "A" Then .Range(.Cells(i, "G"), .Cells(i, "M")).Delete Shift:=xlUp If .Cells(i, "L") <> "A" Then .Cells(i, "J") = "something" & i & "something else" .Cells(i, "M") = "something" & i & "something else" End If Next i End With End Sub