如何更改RefersTo的命名范围?

时间:2013-02-07 20:41:34

标签: excel vba excel-vba

我有一个类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"

知道为什么新地址用双引号括起来(这使得它作为文本字符串而不是地址)?

3 个答案:

答案 0 :(得分:3)

将新范围作为范围对象传递,而不是作为字符串传递:

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

答案 1 :(得分:2)

你得到一个文本字符串的原因是你没有在文本字符串前加上一个=符号(这样Excel就知道它应该是一个公式)

答案 2 :(得分:0)

如果您使用命名范围而不是地址,则可以更改该命名范围以适应您想要的任何内容。

thisworkbook.Names.Add Name:=“ examplerange”,RefersTo:= Range(“ A1:A5”)'此行创建您可以在公式中使用的名称,其方式与“ Instructions!$ A $ 133”相同。 :$ A $ 139“

thisworkbook.Names(“ exampleRange”)。RefersTo = Range(“ A1:A10”)'此行更改了指向的内容

相关问题