Vba 如何更改命名范围的引用?
我有一个类Vba 如何更改命名范围的引用?,vba,excel,Vba,Excel,我有一个类ValidationChanger,它有一个方法changeNamedRangeAddress,该方法应该更改指定范围的引用地址。但是,我的代码意外地将新地址用双引号括起来 ValidationChanger的类定义如下: 'ValidationChanger Sub changeNamedRangeAddress(bk As Workbook, rangeName As String, newAddress As String) bk.Names(rangeName).Refer
ValidationChanger
,它有一个方法changeNamedRangeAddress
,该方法应该更改指定范围的引用地址。但是,我的代码意外地将新地址用双引号括起来
ValidationChanger
的类定义如下:
'ValidationChanger
Sub changeNamedRangeAddress(bk As Workbook, rangeName As String, newAddress As String)
bk.Names(rangeName).RefersTo = newAddress
End Sub
我在一个名为TestRange
的范围内测试它,该范围指的是工作表说明中的地址:说明$133澳元:138澳元
。我的测试应该将地址更改为指令$133澳元: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"
知道为什么新地址用双引号括起来(这使它可以作为文本字符串而不是地址)吗?将新范围作为范围对象传递,而不是作为字符串传递:
vc.changeNamedRangeAddress bk, "TestRange",[Instructions!$A$133:$A$139]
将新范围作为范围对象而不是字符串传递:
vc.changeNamedRangeAddress bk, "TestRange",[Instructions!$A$133:$A$139]
得到文本字符串的原因是没有在文本字符串前面加上=号(这样Excel就会知道它应该是一个公式)得到文本字符串的原因是没有在文本字符串前面加上=号(这样Excel就会知道它应该是一个公式)如果使用命名范围而不是地址,则可以更改该命名范围以适应任何需要
'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")
如果使用命名范围而不是地址,则可以更改该命名范围以适应所需的任何内容
'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")
将新范围作为范围对象传递,而不是作为字符串传递vc.changeNamedRangeAddress bk,“TestRange”,[说明!$A$133:$A$139]
@TimWilliams,这就解决了问题。如果您将其作为答案发布,我将接受。将新范围作为范围对象传递,而不是作为字符串传递vc.changeNamedRangeAddress bk,“TestRange”,[说明!$A$133:$A$139]
@TimWilliams,这就解决了问题。如果你把它作为答案贴出来,我会接受的。你好,卡洛斯。谢谢你的回答。你可以用它来格式化你的答案,让它更容易理解。@Diegomone做到了-现在好多了:)你好Carlos。谢谢你的回答。您可以使用来格式化您的答案,使其更易于理解。@Diegomone做到了-现在好多了:)