Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 循环不停止时执行_Excel_Loops_Vba - Fatal编程技术网

Excel 循环不停止时执行

Excel 循环不停止时执行,excel,loops,vba,Excel,Loops,Vba,我创建此宏是为了从第6行开始,删除第5列中具有0值的行。它应该停在第2列有空单元格的行上。 我的数据只有大约600行。但是,在第20行前后,电子表格一直在等待,我需要按Esc键停止它。当它停止时,它位于最后一行,但不执行最后一部分,即对第4列求和 如果我再次按下宏,它可以很好地处理新数据,并在第4列中添加总和。(顺便说一下,这是我在excel中的第一个宏) 子删除行() ' '删除行宏 '键盘快捷键:Ctrl+d ' 单元格(6、5)。选择 执行While(单元格(ActiveCell.Row,

我创建此宏是为了从第6行开始,删除第5列中具有
0
值的行。它应该停在第2列有空单元格的行上。 我的数据只有大约600行。但是,在
第20行前后,电子表格一直在等待,我需要按
Esc
键停止它。当它停止时,它位于最后一行,但不执行最后一部分,即对第4列求和

如果我再次按下宏,它可以很好地处理新数据,并在
第4列中添加总和。(顺便说一下,这是我在excel中的第一个宏)

子删除行()
'
'删除行宏
'键盘快捷键:Ctrl+d
'
单元格(6、5)。选择
执行While(单元格(ActiveCell.Row,2)”)
Do While(单元格(ActiveCell.Row,5)=0)
行(ActiveCell.Row)。选择
选择。删除移位:=xlUp
环
单元格(ActiveCell.Row+1,5)。选择
环
单元格(ActiveCell.Row,4)。选择
尺寸cel1为字符串,cel2为字符串
cel1=ActiveCell.Offset(-1,0).End(xlUp).Address
cel2=ActiveCell.Offset(-1).地址
ActiveCell.Value=“=sum(&(cel1)&):&(cel2)&”)
端接头

删除行时自下而上循环,否则可能会跳过行

sub deleteRows()
    dim i as long
    with worksheets("Sheet1")
        for i=.cells(.rows.count, "B").end(xlup).row to 6 step -1
            if .cells(i, "E").value2 =0 then
                .cells(i, "E").entirerow.delete
            end if
        next i
        with .cells(.rows.count, "D").end(xlup)
            .offset(1, 0).formula = "=sum(" & .parent.range(.cells(1), .cells(1).end(xlup)).address & ")"
        end with
    end with

end sub
  • 缩进代码
  • 为所有单元格和范围调用定义父工作表引用

  • 它工作得非常漂亮(快速、干净),非常感谢。我第一次就认为它是正确的,但几分钟后,我意识到我必须以.Parent的一个级别退出嵌套的With语句。
    sub deleteRows()
        dim i as long
        with worksheets("Sheet1")
            for i=.cells(.rows.count, "B").end(xlup).row to 6 step -1
                if .cells(i, "E").value2 =0 then
                    .cells(i, "E").entirerow.delete
                end if
            next i
            with .cells(.rows.count, "D").end(xlup)
                .offset(1, 0).formula = "=sum(" & .parent.range(.cells(1), .cells(1).end(xlup)).address & ")"
            end with
        end with
    
    end sub