from1,from2,from3,to1,to2,to3都是预定义的命名范围。它们都具有相同的尺寸。我只是想将所有to都替换为from。
以下代码在这行上一直给我一个类型不匹配错误
ThisWorkbook.Names(to_ranges(i)) = ThisWorkbook.Names(from_ranges(i))
有人可以帮忙吗?谢谢!
Sub named_ranges()
Dim from_ranges() As Variant, to_ranges() As Variant
from_ranges() = Array("from_1", "from_2", "from_3")
to_ranges() = Array("to_1", "to_2", "to_3")
Dim i As Integer
For i = 0 To UBound(from_ranges)
ThisWorkbook.Names(to_ranges(i)) = ThisWorkbook.Names(from_ranges(i))
Next i
End Sub
答案 0 :(得分:0)
定义命名范围时,可以定义范围(工作表或工作簿)。所以:
Range(to_ranges(i)) = Range(from_ranges(i))
由于命名范围的默认范围是“工作簿”,因此可能会很好地工作。
话虽如此,您也可以在此处使用.Names
对象,您只需要获取它的.RefersToRange
属性,否则就不会复制范围,而是要复制的默认属性Name
对象,即其“ RefersToRange”,它只是一个字符串。
基本上,您正在做
Names(to_ranges(i)).RefersToRange = Names(from_ranges(i)).RefersToRange
哪个不正确。
相反(与上面的第一个示例相比,这完全是过度杀伤力):
Range(Names(to_ranges(i)).RefersToRange).Value = Range(Names(from_ranges(i)).RefersToRange).Value
而且...最终,这并不能解决您最初对名称范围(工作簿与工作表)的担心,因为RefersToRange
将按定义的那样进行范围调整,并且可能最终仍会击中您的{{1} },如果它的范围不正确,并且在这里不合格。