excel - 使用 VBA 复制不相交的范围
问题描述
我试图向朋友解释复制不相交的范围,但发现我什至无法向自己解释。我们有如下示例数据:
使用超级简单的示例代码,例如:
Sub KopyTest()
Dim rng1 As Range, rng2 As Range, rng3 As Range
Set rng1 = Range("C6:D11,C13:D14,C16:D18")
Set rng2 = Range("C6:D11,F6:F11")
Set rng3 = Range("C6:D11,G9")
rng1.Copy
rng2.Copy
rng3.Copy
End Sub
rng1 由三个不相交的块组成黄色 + 绿色 + 蓝色
rng2 由两个不相交的块组成黄色 + 粉红色
rng3 由两个不相交的块组成黄色 + 单个灰色单元
前两个范围复制得很好。 rng3
复制失败,我们收到多选错误消息。
我们不明白哪些不相交的范围集可以直接复制,哪些集需要UNION()以及哪些集会失败
一旦我们理解了这一点,我们就可以编写一些代码来分析一个范围并确定它是否“可复制”而不是依赖于OnError
.
解决方案
我相信您收到的特定错误(来自 XL2000)的答案在 microsoft支持页面上。它和你想象的一样滑稽:
当您的单元格或范围选择位于不同的列或不同的行中时,可能会出现这些错误消息。但是,如果您的选择包含以下任何内容,您可以复制和粘贴不相邻的范围而不会收到错误消息:
同一列中的多行,例如 A1、A3、A5。
同一行中的多个列,例如 A2、C2、E2。
同一列和行中的多个行和列,例如 A1、C1、A3、C3、A5、C5。
您的最后一个范围不适合三个公认的多项选择中的任何一个。
允许的多选范围与数组公式或 sumproduct 公式中允许的范围非常相似。
在该帮助页面的下一部分中,使用了措辞“......必须保持连续的矩形......”。而且我认为这可能是说明多选复制/剪切/粘贴中可接受的内容的最简洁方式。换句话说,想想如果这个多选范围不是.Copy
你会发生什么。.Cut
结果有意义吗?剩余的范围可以“滑动”在一起以删除那些多选的单元格吗?如果没有,那么你也不能复制。出于原因。
推荐阅读
- javascript - 自定义切换开关在三个切换后停止工作
- authentication - 网络使用 UUID 代替 MAC 进行身份验证
- linux - 转储失败,因为无法加载资产
- r - 子集 data.table 满足条件
- swift - 表视图 w。重新加载新数据时动态高度滚动
- python - django makemigration alterfield 没有任何改变
- c# - 如何在 C# 中仅从 16 位图像中读取像素数据而不是元数据?
- java - 如何对调度程序进行单元测试?
- mysql - 如何计算具有记录限制的连接表的mysql记录?
- unity3d - yield return null 退出迭代