用户窗体中的命名范围(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