2015-10-18 150 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