用户窗体中的命名范围(Excel)的variables给我一个错误
我对Excel-VBA(实际上任何一种编程)都很陌生,我正在寻求帮助。
我正在尝试在Userform(Excel-VBA)中创build一个命名范围的variables,但是当我尝试使用创build的variables的macros时,我收到一个错误:
运行时错误'1004':对象'_Worksheet'的方法'范围'失败
如何重现:
1)用一个标签(在我的代码中命名为test1)制作一个用户窗体。
2)为macros制作模块。
这是Userform和模块的代码。
用户表单
Private Sub UserForm_Initialize() Dim wsTest As Worksheet Dim rnTest As Range Set wsTest = Sheets("Test") MsgBox wsTest.Name Set rnTest = wsTest.Range("NamedRange") MsgBox rnTest.Name Me.Test1.Caption = Format(wsTest.Range("rnTest")(1).Value, "$#,##0") End Sub
和模块
Sub NR_Test() UserForm1.Show False End Sub
variables'wsTest'起作用。 我知道这一点,因为当我input名称pipe理器(NamedRange)中看到的命名范围名称时,macros的工作。
我search了Stackoverflow和其他资源来寻找一个解决scheme。 大多数post告诉我,我需要使用“设置”从一个范围,使一个variables,但不幸的是,这是不够的。 我错过了一些重要的东西,我不能把手指放在上面。
任何帮助将非常感激。 如果有任何问题,请不要犹豫,问。
干杯,西蒙
更改
Format(wsTest.Range("rnTest")(1).Value, "$#,##0")
至
Format(rnTest(1).Value, "$#,##0")
rnTest
是您要定位的范围对象的名称,但在Range()
方法rnTest
引号将其传递时,它将被视为文字string。 除非你也有一个名为“rnTest”的命名范围,否则这将始终失败。
正如你可以从上面的例子看到的那样,你现在可以直接访问rnTest
对象,因为引用已经被设置得更早了。 希望是有道理的。
你应该能够把这个代码缩减到这个范围,假设范围名称是全局的,即你不需要使用工作表。
Private Sub UserForm_Initialize() Dim rnTest As Range Set rnTest = Range("NamedRange") Me.Test1.Caption = Format(rnTest.Cells(1).Value, "$#,##0") End Sub