我在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
其余的顺利进行。没有崩溃或错误。
有什么想法吗?
答案 0 :(得分:1)
也许你需要从底部开始然后再上去。
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
答案 1 :(得分:1)
这不是(!)应该是一个额外的答案。然而,我想补充这个“答案”,因为(偶尔)我在一张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
我只是为可能遇到类似问题的其他人添加此“解决方案”。如前所述,有几个字符看起来相似但不是。另请注意,这只是西里尔字母。可能还有其他字符集似乎相似。