
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...)填充后,试验时总是删除两行(条件行和下一行)!如何做得更好 展开
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...)填充后,试验时总是删除两行(条件行和下一行)!如何做得更好 展开
4个回答
展开全部
因为你在事件运行过程中执行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
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
展开全部
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
根本没必要去选中再删除,其他你录制的很多宏都可以把那个选择的语句,直接用需要操作的单元格来代替。
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序运行速度太快
删除之前又被判断到了
Rows(i).Select
之前加一条命令;改成
Cells(i, 1)=""
Rows(i).Select
就可以了
删除之前又被判断到了
Rows(i).Select
之前加一条命令;改成
Cells(i, 1)=""
Rows(i).Select
就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询