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