ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 811|回复: 5

[求助] 各位大侠帮忙看下我这段删除程序错在哪里?谢谢

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-2 19:17 | 显示全部楼层 |阅读模式
各位大侠帮忙看下我这段程序错在哪里?谢谢
程序可以正确得出我要的结果,只是有一个问题,就是执行删除后,如果再一次执行就会出现提示错误,查了一下是要删除的行存在才不会提示错误。

程序如下:
Sub 批量删除()
   Dim i As Long
   Dim K As Long
   With Sheet1
   Sheet1.Select
       For i = 1 To 50
       If Cells(i, 1) = "序号" Then
          For K = 1 To 20
               If Cells(i + K, 1) = "删除" Then
                Rows(i + 1).Resize(K - 1).EntireRow.Delete
               End If
          Next
        End If
        Next
    End With
End Sub


批量删除.rar

11.1 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2019-10-2 19:25 | 显示全部楼层
本帖最后由 moonlit123 于 2019-10-2 19:27 编辑

Rows(i + 1).Resize(K - 1).EntireRow.Delete
这句k-1, 如果你某一行为“序号”,”下面紧接着是“删除”
那么k-1=0 然后resize(0)就出错了。
建议修改下这个逻辑。(反正你序号和删除中间如果没有行数,也就是k=1的时候,是不需要执行删行操作的,索性从k=2开始循环就是了)

Sub 批量删除()
   Dim i As Long
   Dim K As Long
   With Sheet1
   Sheet1.Select
       For i = 1 To 50
       If Cells(i, 1) = "序号" Then
          For K = 2 To 20
               If Cells(i + K, 1) = "删除" Then
                Rows(i + 1).Resize(K - 1).EntireRow.Delete
               End If
          Next
        End If
        Next
    End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-2 19:36 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-10-2 20:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub 批量删除()
  2.     Dim MaxRw As Long, Rw As Long, Rng As Range, Rg As Range
  3.        MaxRw = Cells(Rows.Count, 1).End(xlUp).Row
  4.          For Each Rng In Range("A1:A" & MaxRw)
  5.              If Rng.Value = "序号" Then
  6.                 For Rw = Rng.Row + 1 To MaxRw
  7.                     If Rng.Offset(Rw, 0) = "删除" Then
  8.                        If Rg Is Nothing Then
  9.                          Set Rg = Range(Cells(Rng.Row + 1, 1), Cells(Rng.Offset(Rw - 1, 0).Row, 1))
  10.                        Else
  11.                          Set Rg = Union(Rg, Range(Cells(Rng.Row + 1, 1), Cells(Rng.Offset(Rw - 1, 0).Row, 1)))
  12.                        End If
  13.                     End If
  14.                 Next Rw
  15.              End If
  16.          Next Rng
  17.     Rg.EntireRow.Delete
  18. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-2 20:51 | 显示全部楼层
moonlit123 发表于 2019-10-2 19:25
Rows(i + 1).Resize(K - 1).EntireRow.Delete
这句k-1, 如果你某一行为“序号”,”下面紧接着是“删除” ...

谢谢,可以了,现在不会出现错误提示了

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-2 20:56 | 显示全部楼层

大侠,提示
Rg.EntireRow.Delete这句,变量为设置?好像已经设置了啊,
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 17:54 , Processed in 0.042859 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表