2016-06-14 84 views
-1

嵌套的If語句有些問題,導致Do循環錯誤。如果我簡化我的If塊到一個項目,它工作正常。 (我通常在VS中使用C#.NET)。這應該是Excel中簡單表單的一部分,以幫助數據輸入。Excel VBA err:循環沒有做

Private Sub cbDelete_Click() 
If tbName.Value = "" Then 
MsgBox "Sorry, please navigate to a non-blank row." 
Exit Sub 
End If 

Dim i As Integer 
i = 3 
Do While ThisWorkbook.Worksheets("Non-SR").Range("A" & i).Value <> "" 

'MsgBox ThisWorkbook.Worksheets("Non-SR").Range("A" & i).Value 

If (tbName.Value = ThisWorkbook.Worksheets("Non-SR").Range("A" & i).Value) Then 
    If (dpDateSubmited.Value = ThisWorkbook.Worksheets("Non-SR").Range("B" & i).Value) Then 
     If (tbLocation.Value = ThisWorkbook.Worksheets("Non-SR").Range("C" & i).Value) Then 
      If (tbBU.Value = ThisWorkbook.Worksheets("Non-SR").Range("D" & i).Value) Then 
       If (tbTitle.Value = ThisWorkbook.Worksheets("Non-SR").Range("E" & i).Value) Then 
        If (tbDescription.Value = ThisWorkbook.Worksheets("Non-SR").Range("F" & i).Value) Then 
         If (tbStatus.Value = ThisWorkbook.Worksheets("Non-SR").Range("G" & i).Value) Then 
          ThisWorkbook.Worksheets("Non-SR").Rows(i).Delete Shift:=xlUp 
          Exit Sub 
End If 
i = i + 1 
Loop 

MsgBox "Item not found!" 
End Sub 


New fixed code: 
Private Sub CommandButton1_Click() 
If tbName.Value = "" Then 
MsgBox "Sorry, please navigate to a non-blank row." 
Exit Sub 
End If 

Dim i As Integer 
i = 3 
Do While ThisWorkbook.Worksheets("Non-SR").Range("A" & i).Value <> "" 

'MsgBox ThisWorkbook.Worksheets("Non-SR").Range("A" & i).Value 

If (tbName.Value = ThisWorkbook.Worksheets("Non-SR").Range("A" & i).Value) And _ 
    (dpDateSubmited.Value = ThisWorkbook.Worksheets("Non-SR").Range("B" & i).Value) And _ 
     (tbLocation.Value = ThisWorkbook.Worksheets("Non-SR").Range("C" & i).Value) And _ 
      (tbBU.Value = ThisWorkbook.Worksheets("Non-SR").Range("D" & i).Value) And _ 
       (tbTitle.Value = ThisWorkbook.Worksheets("Non-SR").Range("E" & i).Value) And _ 
        (tbDescription.Value = ThisWorkbook.Worksheets("Non-SR").Range("F" & i).Value) And _ 
         (tbStatus.Value = ThisWorkbook.Worksheets("Non-SR").Range("G" & i).Value) Then 
          ThisWorkbook.Worksheets("Non-SR").Rows(i).Delete Shift:=xlUp 
          Exit Sub 
End If 
i = i + 1 
Loop 

MsgBox "Item not found!" 
End Sub 

感謝所有的幫助。 -RickH

+1

封閉代碼所有的'IF'都帶有'End If'。 – Jeeped

+0

看起來你有很多沒有「End If」的「If」語句。 當語句全部位於同一行時,「If」只會在沒有「End If」的情況下運行。 –

+0

不知道我在哪裏放置結束如果在所有的線上。它是一個完整的邏輯結構,其中一切都需要真實地去除行。任何故障再次循環到頂部。 –

回答

0

我還不太確定,你需要什麼。不過,我想提出一個已有一些改變,以簡化通過以下方式你的代碼塊:

Private Sub cbDelete_Click() 

If tbName.Value = "" Then 
    MsgBox "Sorry, please navigate to a non-blank row." 
    Exit Sub 
End If 

Dim i As Integer 

i = 3 
With ThisWorkbook.Worksheets("Non-SR") 
    For i = 3 To .Cells(.Rows.Count, "A").End(xlUp).Row 
     'MsgBox ThisWorkbook.Worksheets("Non-SR").Range("A" & i).Value 
     If tbName.Value = .Range("A" & i).Value And _ 
      dpDateSubmited.Value = .Range("B" & i).Value And _ 
      tbLocation.Value = .Range("C" & i).Value And _ 
      tbBU.Value = .Range("D" & i).Value And _ 
      tbTitle.Value = .Range("E" & i).Value And _ 
      tbDescription.Value = .Range("F" & i).Value And _ 
      tbStatus.Value = .Range("G" & i).Value Then 
       .Rows(i).Delete Shift:=xlUp 
       Exit Sub 
     End If 
    Next i 
End With 

MsgBox "Item not found!" 

End Sub 
  1. Do...Loop已被刪除,並用For...Next
  2. 所有If報表已經交換合併爲一個
  3. A With塊已設置爲加速您的代碼並縮短代碼。
+0

謝謝拉爾夫,更優雅,它實際上比我的代碼更有效。 –

0

如果語句是代碼塊。
你可以有一個單行If語句

VBA

If a = 10 Then do_something Else do_somthingElse 

C#

if(a = 10)  
    do_somthingElse; 

多行如果語句必須關閉

VBA使用結束如果附上代碼

If a = 10 Then 
    do_something 
Else 
    do_somthingElse 
End If 

C#用括號{}括

if(a = 10){ 
    do_somthingElse; 
else{ 
    do_somthingElse; 
} 

您的代碼打開7如果語句塊它們的關閉1