Как изменить RefersTo для именованного диапазона?

Обновить

April 2019

Просмотры

4k раз

1

У меня есть класс ValidationChangerс методом , changeNamedRangeAddressкоторый должен изменить RefersToадрес для именованного диапазона. Тем не менее, мой код неожиданно оберточной новый адрес в двойных кавычках.

Определение класса для ValidationChangerздесь:

'ValidationChanger

Sub changeNamedRangeAddress(bk As Workbook, rangeName As String, newAddress As String)
 bk.Names(rangeName).RefersTo = newAddress
End Sub

Я проверить его на диапазон с именем TestRange, которое ссылается на адрес в листе Instructions: Instructions!$A$133:$A$138. Мой тест должен изменить адрес к Instructions!$A$133:$A$139следующему:

Sub testValidationChanger()

Dim vc As New ValidationChanger
Dim bk As Workbook

Set bk = Workbooks("test.xlsm")
Debug.Print bk.Names("TestRange").RefersTo
vc.changeNamedRangeAddress bk, "TestRange", "Instructions!$A$133:$A$139"
Debug.Print bk.Names("TestRange").RefersTo

End Sub

Выход:

=Instructions!$A$133:$A$138
="Instructions!$A$133:$A$139"

Любая идея, почему новый адрес заключен в двойные кавычки (что делает его функцию в виде текстовой строки вместо адреса)?

2 ответы

3

Pass the new range as a range object, and not as a string:

vc.changeNamedRangeAddress bk, "TestRange",[Instructions!$A$133:$A$139]
2

The reason you got a text string is that you did not preface the text string with an = sign (so that Excel would know it was supposed to be a formula)