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指的是 sheet 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"

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

4

3 回答 3

3

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

vc.changeNamedRangeAddress bk, "TestRange",[Instructions!$A$133:$A$139]
于 2013-02-07T22:01:36.557 回答
2

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

于 2013-02-08T08:27:36.803 回答
0

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

'this line creates the name that you can use in formulas in 
'much the same way as "Instructions!$A$133:$A$139"
thisworkbook.Names.Add Name:="examplerange", RefersTo:=Range("A1:A5")

'this line changes what it's pointing to
thisworkbook.Names("exampleRange").RefersTo = Range("A1:A10")
于 2019-06-06T20:50:10.910 回答