2015-10-18 69 views
0

我有以下IF语句在VBA,但“删除”的说法,或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]* ""-""??_-;[email protected]_-" 
    End If 
Next i 

休息运行流畅。没有崩溃或错误。

任何想法?

+0

“完全忽略”是什么意思?你能看到代码在调试模式下进入If块(Select + Delete)吗? –

+1

P.s.你的是一个非常基本的“If”块,如果单元格L&i的值等于“A”,或者你输入另一个部分,那么你输入Delete部分。因此,你的陈述“删除部分完全被忽略,其余部分顺利运行”使我认为单元格“L&i”不等于A. –

+0

也许是'Sheets(“Reports”)。Range(“G “&i&”:M“&i).Select'没有选择任何东西。 – JJF

回答

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 

我只是除了这个“解决方案”为他人谁可能遇到类似的问题。如前所述,有几个字符看起来相似但不是。还要注意,这只是西里尔字母。那里可能还有其他的字符集看起来很相似。

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 
+0

完成了!请问我的声明背后的逻辑是不是起作用,你的“与”方法是什么? – Gokotai

+0

'with sh'就是表示你指的是什么表,而不是在每行上写'Sheets(“Reports”)'。我相信主要的问题是,如果你在L4和L5上找到“A”,首先你在L4中删除“A”并且向上移动,L5现在已经向上移动并变成L4,所以当你循环到L5时,你错过了“ A“,因为它现在在L4。当你删除&移动单元格时,从底部开始是一个好主意,然后你不会错过任何单元格。我也使用过滤器来一次删除单元格,而不是一次一个。 – Davesexcel

+0

这听起来像是一个更好的方式。我可以问问它是如何完成的? – Gokotai