1

名前付き範囲のアドレスを変更ValidationChangerするメソッドを持つクラスがあります。しかし、私のコードは予期せず新しいアドレスを二重引用符で囲んでいます。changeNamedRangeAddressRefersTo

ここでのクラス定義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"

新しいアドレスが二重引用符で囲まれている理由(アドレスではなくテキスト文字列として機能する)はありますか?

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 に答える