Когда вы определяете именованный диапазон, вы определяете его область действия (рабочий лист или рабочая книга).Итак:
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
будет определена в том виде, в каком она была определена, и все равно может в конечном итоге ударить ваш ActiveSheet
, если он неправильно определен И оставлен здесь без оговорок.