Excel VBA错误:无Do循环
嵌套的If语句有问题,导致Do循环错误。如果我将If块简化为一个项,它就可以正常工作。(我通常在VS的C#NET中工作)。这应该是Excel中帮助数据输入的简单表单的一部分Excel VBA错误:无Do循环,excel,vba,Excel,Vba,嵌套的If语句有问题,导致Do循环错误。如果我将If块简化为一个项,它就可以正常工作。(我通常在VS的C#NET中工作)。这应该是Excel中帮助数据输入的简单表单的一部分 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 ThisWo
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
Private Sub cbDelete_Click()
如果tbName.Value=”“,则
MsgBox“抱歉,请导航到非空行。”
出口接头
如果结束
作为整数的Dim i
i=3
执行此工作簿。工作表(“非SR”)。范围(“A”&i)。值“”
'MsgBox ThisWorkbook.Worksheets(“非SR”).Range(“A”&i).Value
如果(tbName.Value=ThisWorkbook.Worksheets(“非SR”).Range(“A”&i.Value),则
如果(dpDateSubmited.Value=此工作簿.工作表(“非SR”).范围(“B”&i).Value),则
如果(tbLocation.Value=ThisWorkbook.Worksheets(“非SR”).Range(“C”和i.Value),则
如果(tbBU.Value=ThisWorkbook.Worksheets(“非SR”).Range(“D”和i.Value),则
如果(tbTitle.Value=ThisWorkbook.Worksheets(“非SR”).Range(“E”和i.Value),则
如果(tbDescription.Value=此工作簿.工作表(“非SR”).范围(“F”&i).Value),则
如果(tbStatus.Value=ThisWorkbook.Worksheets(“非SR”).Range(“G”和i.Value),则
此工作簿.工作表(“非SR”).行(i).删除Shift:=xlUp
出口接头
如果结束
i=i+1
环
MsgBox“未找到项目!”
端接头
新的固定代码:
私有子命令按钮1_单击()
如果tbName.Value=”“,则
MsgBox“抱歉,请导航到非空行。”
出口接头
如果结束
作为整数的Dim i
i=3
执行此工作簿。工作表(“非SR”)。范围(“A”&i)。值“”
'MsgBox ThisWorkbook.Worksheets(“非SR”).Range(“A”&i).Value
如果(tbName.Value=ThisWorkbook.Worksheets(“非SR”).Range(“A”&i.Value)和_
(dpDateSubmited.Value=此工作簿.工作表(“非SR”).范围(“B”&i).Value)和_
(tbLocation.Value=此工作簿.工作表(“非SR”).范围(“C”&i).Value)和_
(tbBU.Value=此工作簿.工作表(“非SR”).范围(“D”和i).Value)和_
(tbTitle.Value=此工作簿工作表(“非SR”).范围(“E”和i).Value)和_
(tbDescription.Value=此工作簿.工作表(“非SR”).范围(“F”和i).Value)和_
(tbStatus.Value=此工作簿.工作表(“非SR”).范围(“G”&i).Value)然后
此工作簿.工作表(“非SR”).行(i).删除Shift:=xlUp
出口接头
如果结束
i=i+1
环
MsgBox“未找到项目!”
端接头
谢谢你的帮助。
-瑞奇我还不太确定你需要什么。尽管如此,我还是想提出一些修改,以以下方式简化您的代码块:
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
Do…循环
已被删除,并与一个For…Next
If
语句已合并为一个块以加快代码速度并缩短代码
If语句是代码块
您可以有一行If语句 VBA
If a = 10 Then do_something Else do_somthingElse
C#
if(a = 10)
do_somthingElse;
必须关闭多行If语句
VBA使用End If将代码括起来
If a = 10 Then
do_something
Else
do_somthingElse
End If
if(a = 10){
do_somthingElse;
else{
do_somthingElse;
}
C#使用括号{}将代码括起来
If a = 10 Then
do_something
Else
do_somthingElse
End If
if(a = 10){
do_somthingElse;
else{
do_somthingElse;
}
您的代码打开7 If语句阻止了其中一个关闭的1用
End If
关闭所有If
。看起来您有很多没有“End If”的“If”语句。当语句都位于同一行时,“If”仅在没有“End If”的情况下才起作用。不确定在所有行上我将End If放在哪里。这是一个完整的逻辑结构,其中所有内容都必须真实才能删除行。任何失败都会再次循环到顶部。在所有注释的帮助下,我修复了我的旧代码,尽管我可能会使用Ralph的示例,因为它更优雅。谢谢Ralph,它更优雅,而且与我的代码相比,它确实有效。