用户窗体中命名范围 (Excel) 的变量给我一个错误

A variable of a Named Range (Excel) in a Userform gives me an error

我对 Excel-VBA(实际上是任何一种编程)都很陌生,我正在寻求帮助。

我试图在用户窗体 (Excel-VBA) 中创建命名范围的变量,但是当我尝试将宏与创建的变量一起使用时,我收到错误消息:

Run-time error '1004': Method 'Range' of object '_Worksheet' failed

如何重现:

1) 创建一个带有标签的用户表单(在我的代码中命名为 test1)。

2) 为宏制作模块。

这是用户窗体和模块的代码。

用户表单

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

变量'wsTest'有效。我知道这一点是因为当我输入在名称管理器 (NamedRange) 中看到的命名范围名称时,宏会起作用。

我搜索了 Whosebug 和其他资源以寻找解决方案。大多数帖子告诉我我需要使用 "Set" 从一个范围创建一个变量,但不幸的是这还不够。我错过了一些重要的部分,我无法确定它。

非常感谢任何帮助。如有任何问题,请随时提出。

干杯, 西蒙

改变

Format(wsTest.Range("rnTest")(1).Value, "$#,##0")

Format(rnTest(1).Value, "$#,##0")

rnTest 是您定位的范围对象的名称,但是当您在 Range() 方法中用引号将其传递时,它会被视为文字字符串。除非你也有一个名为 "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