求教:尾行删除错误
vba吧
全部回复
仅看楼主
level 3
Private Sub CommandButton13_Click()
Dim k As Integer
For k = 2 To Range("A65536").End(xlUp).Row Sheet4.Range("a" & k). entire row.Next
End Sub
以上代码本意是想从尾行逐行删除至第二行
但结果怎么是删除偶数行
自学小白,烦请大侠多指教
2024年03月18日 02点03分 1
level 11
循环当k=2时,表第2行就被删了,因为2行没了,原来的第3行就上移,变成第2行。next之后,表当前第3行就被删了,删后第4行上移变第3行。所以,结果就会是隔行删除
2024年03月18日 06点03分 0
原因就是你忽略了删除行后内容会上移。了解原因后,要实现你说的,从下往上删就没这问题了。还有方法是,你循环可以只删第二行。与其如此,那么,为啥还循环一行一行地删呢?一次性把第二到最后行的区域一次性删除。还要啥自行车
2024年03月18日 06点03分
是这样的,那应该怎么改才能逐行从后往前删除,最后保留标题栏[呵呵]
2024年03月18日 06点03分
@甄会三分球 问一个额外的问题。假设你有100行数据,要手工删除,你会一行一行地删么? 如果不会,你会怎么做?那,vba为什么还要一行一行地删除呢?
2024年03月19日 03点03分
@lxlzmh2002 rows("2:100").delete '删除2到100行,引号内的内容可随便使用变量替换。
2024年03月19日 03点03分
level 1
因为你每删一行,行号就会有变化,所以你需要把行号改为+1或-1才能正确删除
正确的
行数,另外如果是所有行都需要删的话,为什么不直接把整个区域一起删掉而要一行一行来删呢?
2024年03月18日 02点03分 2
@ISD_狮子座 这个是做数据管理,逐行删除的设定。你建议用+1/-1的方式能不能写出来让我比对学习一下
2024年03月18日 03点03分
@甄会三分球 例如你是从2到100行这样,那第2行删了后,你K值就得-1,不然原本的第3行就变成了第2行,而且 K=3的时候,实际上删的是原来的第4行
2024年03月18日 05点03分
level 1
For k = Range("A65536").End(xlUp).Row to 2 step -1改成这样(倒过来就可以。)
2024年03月18日 04点03分 3
试了,不行
2024年03月18日 06点03分
倒过来执行内容就是有几行就几行全部被删除了
2024年03月18日 06点03分
@甄会三分球 对呀,就是会删除所有。主要是你提问也没有说别的要求。
2024年03月18日 07点03分
回复 跟着南哥混3天饿9顿 :我有哈,【以上代码本意是想从尾行逐行删除至第二行 但结果怎么是删除偶数行】 如果你知道这个怎么执行的话,烦请指点一下
2024年03月18日 09点03分
level 7
我看删除语句并没有区别行内数据,可以下面这样一次性删除,速度要快些:
k = Range("A65536").End(xlUp).Row
if k>2 then range("2:" & k).delete
2024年03月18日 07点03分 5
设定要求不是一次性删除,而是逐行从后网点删除
2024年03月18日 07点03分
这样做的目的是,输入过程中出现错误可以就上一条错误记录进行删除,其他没有错误的行则不受影响
2024年03月18日 07点03分
level 7
经典for循环删除单元格,用long类型变量记录行数(rows),再写到for i = 1 to rows ......... next i 里面去。
2024年03月18日 09点03分 6
level 3
晚上自己用下面这个代码试出来了,达到了原本的要求,谢谢给出建议的各位大侠哈
Private Sub CommandButton13_Click()
Dim i,k As Integer
k = Range("A65536").End(xlUp).Row
if k>1 then
i=Range("A65536").End(xlUp).Row
Sheet4.Range("a" & i). entire row .delet
endif
End Sub
2024年03月18日 11点03分 7
1