【发布时间】:2016-07-09 11:38:58
【问题描述】:
我知道,我知道,合并范围很难使用。但无论如何:
我发现了一些有趣的行为,我可以复制/粘贴一些合并范围,但不能复制/粘贴其他范围。于是我试验了一下。
设置:
很明显,这些范围不是一回事。合并后命名的范围仅包含 topLeftCell 引用,而命名后合并的范围保留对所有单元格的引用。
编辑:测试代码
Option Explicit
Public Sub PerformTests()
Const NAME_THEN_MERGE As String = "Name_Then_Merge"
Const MERGE_THEN_NAME As String = "Merge_Then_Name"
Const PASTE_NAME_THEN_MERGE As String = "Paste_Name_Then_Merge"
Const PASTE_MERGE_THEN_NAME As String = "Paste_Merge_Then_Name"
TestNames MERGE_THEN_NAME, PASTE_NAME_THEN_MERGE
'/ Result: Error 1004, cannot do that to a merged cell
End Sub
Public Sub TestNames(ByVal copyName As String, ByVal pasteName As String)
wsPasteTest.Activate
Dim copyRange As Range, pasteRange As Range
Set copyRange = wsPasteTest.Range(copyName)
Set pasteRange = wsPasteTest.Range(pasteName)
CopyPasteCell copyRange, pasteRange
End Sub
Public Sub CopyPasteCell(ByRef copyCell As Range, ByRef pasteCell As Range, Optional ByVal pasteRowHeights As Boolean = False)
copyCell.Copy
pasteCell.PasteSpecial xlPasteAll
If pasteRowHeights Then
Dim sourceRowHeight As Long
sourceRowHeight = copyCell.rowHeight
pasteCell.rowHeight = sourceRowHeight
End If
End Sub
经过广泛的测试,这似乎是结论:
如果您命名一个单元格区域,然后将它们合并,则命名的 Range 保留对所有单元格的引用。如果先合并,则命名范围仅指 topLeftCell。
如果您尝试复制命名范围,则会将其视为与其引用相同的大小。因此,可以将一组(命名然后合并)5 个单元格复制到另一组相同大小的合并单元格或单个单元格。
但是,(合并然后命名)范围只能复制到单个单元格。尝试复制到一组 5 个合并单元格将导致 1004 错误。
为什么?导致这种差异的合并单元格和命名范围的处理方式是怎么回事?
供参考,这是 Office 365,Excel 版本 15.0.4805.1003
【问题讨论】:
-
我责怪Joel。
-
遇到 1004 错误时的粘贴方法是什么?我在复制错误时遇到问题
-
@Dan 添加了测试代码
标签: vba excel named-ranges