Используются именованные диапазоны в VBA - PullRequest
0 голосов
/ 22 октября 2018

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

1 Ответ

0 голосов
/ 22 октября 2018

Когда вы определяете именованный диапазон, вы определяете его область действия (рабочий лист или рабочая книга).Итак:

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, если он неправильно определен И оставлен здесь без оговорок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...