Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA错误:无Do循环_Excel_Vba - Fatal编程技术网

Excel VBA错误:无Do循环

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

嵌套的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 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,它更优雅,而且与我的代码相比,它确实有效。