vba - 删除行后更改选择?
问题描述
想
Loop through multiple selection areas (r = 1 to n)
Delete rows in area r
Next area
注意
选择可以是不连续的,并且可以是任何(垂直)顺序。即,区域 1 可以是第 8-10 行,区域 2 可以是第 2-3 行,区域 3 可以是第 14-18 行。选定的单元格区域不应重叠以防止错误。
问题
在一个区域中执行行删除会导致下面的所有数据上移。下面的选定区域不会移动。因此,新数据(您不想删除)会滚动到选定区域。
例子
Row 1: A B C
Row 2: D E F (Select R2C1:R2C3 first)
Row 3: G H I
Row 4: J K L (CTRL Select R4C1:R4C3 next)
Row 5: M N O
选择了 2 个区域。我们希望删除第 2 行和第 4 行。
代码
For aCounter = 1 to Selection.Areas.Count
Selection.Areas(aCounter).EntireRow.Delete
Next
结果
Row 1: A B C
Row 2: G H I (This row is selected)
Row 3: J K L
Row 4: (blank) (This row is also selected)
Row 5: (blank)
发生了什么
选择的第一个区域 (Areas(1)) 是第 2 行,已被删除。第 3-5 行卷起,但第 2 行仍保留在第 4 行。这意味着 JKL 进入第 3 行,而 MNO 进入第 4 行。在下一个循环中,Areas(2) 仍设置为第 4 行,因此 MNO 是删除。
应该发生什么
Areas(2) 应该已经移动了删除的行数。
问题
有没有一种方法可以轻松编写代码,而无需遍历所有区域,检查它们是否低于已删除的行,并在每次删除一行时将它们向上移动删除的行数?
解决方案
从底部开始,向上删除行。
例如:
For aCounter = Selection.Areas.Count To 1 Step -1
Selection.Areas(aCounter).EntireRow.Delete
Next
推荐阅读
- linux - 迭代打印每个子文件夹的文件数
- c# - Visual Studio 2017 无法启动调试
- git - jenkins maven 不推送我的 pom 并使用旧的 maven-release-prepare 版本
- json - 如何将json对象与角度中相同元素的分组绑定
- javascript - 如何将数据从 Node 发送到另一台服务器
- powershell - 使用 powershell 在多台机器上远程运行安装文件 (.exe)
- json - 如何使用 volley 库在 android 中发出 JSONObject 的请求(类型:POST)?
- codeigniter-3 - 在 Codeigniter 中的 php 7.2 中出现错误“未定义的函数 mcrypt_create_iv()”
- javascript - 链接即使打开也没有激活
- python - 如何在清除子集总和时修复此错误?