我遇到了一些挑战,因为工会无法在宏里发挥作用。它应该可以合并几个范围,但似乎只能选择第一个范围。为了帮助解决挑战,我将所有代码精简为:
Dim copiedrange As Range
Dim SrcWB As Workbook
Dim SrcWS As Worksheet
Set SrcWB = Workbooks("all-euro-data-2018-2019 (1)")
Set SrcWS = SrcWB.Sheets("E1")
i = 1
Set copiedrange = Union(SrcWS.Range("A" & i & ":F" & i), SrcWS.Range("AX" & i), _
SrcWS.Range("AZ" & i), SrcWS.Range("BH" & i & ":BJ" & i))
MsgBox copiedrange.Columns.Count
End Sub
由于某种原因,当我认为应该考虑所有其他范围时,列数应返回6(从A到F)。我在想什么/弄错了/是个白痴吗?
谢谢!
答案 0 :(得分:3)
Union
工作正常。例如,MsgBox copiedRange.Address
返回$A$1:$F$1,$AX$1,$AZ$1,$BH$1:$BJ$1
。
您遇到Range.Columns
的行为。Columns.Count
返回第一个区域($A$1:$F$1
)中的列数。
摘自Range.Columns
文档:
当应用于多区域选择的
Range
对象时,此属性仅返回范围的第一个区域中的列。例如,如果Range
对象具有两个区域-A1:B2
和C3:D4
—Selection.Columns.Count
返回2,而不是4。要在可能包含多个整数的范围内使用此属性-area选择,测试Areas.Count
,以确定范围是否包含多个区域。如果是这样,请遍历范围内的每个区域。