excel的这个vba错在哪?

PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)Fori=100To1Step-1IfCells(i,1).... Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For i = 100 To 1 Step -1
If Cells(i, 1).Value = 21 Then
Rows(i).Select
Selection.Delete Shift:=xlUp
End If
Next
End Sub
程序实现:删除满足条件的行。但我用自然序列(1 2 3 4...)填充后,试验时总是删除两行(条件行和下一行)!如何做得更好
展开
 我来答
bizhenyu0316
2013-03-19 · TA获得超过637个赞
知道小有建树答主
回答量:1042
采纳率:0%
帮助的人:675万
展开全部
因为你在事件运行过程中执行rows(i).select的时候又一次触发了selectionchange事件,解决办法有两个
1、在事件的前后加上暂时关闭触发事件的代码

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
你的代码
Application.EnableEvents = True
End Sub

2、去掉select语句,合并成一个

就是把
Rows(i).Select
Selection.Delete Shift:=xlUp

两句合并成一个
rows(i).delete
太极健1969
2013-03-19 · TA获得超过9038个赞
知道大有可为答主
回答量:8668
采纳率:69%
帮助的人:4066万
展开全部
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For i = 100 To 1 Step -1
If Cells(i, 1).Value = 21 Then Rows(i).Delete
Next

End Sub
你这是选择任意单元格就执行程序了哦,你的表格还怎么用呀?每次选择到这个表选择一个单元格就执行。建议你用其他方法,如运行宏才条件删除
sub test ()
for i=100 to 1 step -1
if cells(i,1).value=21 then rows(i).delete
next i
end sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
crazy0qwer
2013-03-19 · TA获得超过3304个赞
知道大有可为答主
回答量:4020
采纳率:71%
帮助的人:1591万
展开全部
根本没必要去选中再删除,其他你录制的很多宏都可以把那个选择的语句,直接用需要操作的单元格来代替。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For i = 100 To 1 Step -1
If Cells(i, 1).Value = 21 Then
Rows(i).Delete
End If
Next
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zzhilling
2013-03-19 · TA获得超过2704个赞
知道大有可为答主
回答量:3255
采纳率:45%
帮助的人:1273万
展开全部
程序运行速度太快
删除之前又被判断到了

Rows(i).Select
之前加一条命令;改成
Cells(i, 1)=""
Rows(i).Select

就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式