如何改变RefersTo命名的范围?

我有一个类ValidationChanger ,方法changeNamedRangeAddress应该改变一个命名范围的RefersTo地址。 但是,我的代码意外地将新地址换成双引号。

ValidationChanger类定义在这里:

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

我testing了一个名为TestRange的范围,它引用表单中的地址InstructionsInstructions!$A$133:$A$138 。 我的testing应该将地址更改为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" 

任何想法为什么新的地址是用双引号(这使得它作为一个文本string,而不是一个地址)包装?

将新范围作为范围对象传递,而不是string:

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

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