Userform中的命名范围(Excel)变量会给我一个错误



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

我试图在Userform(Excel VBA)中创建一个命名范围的变量,但当我尝试将宏与创建的变量一起使用时,我收到一个错误:

运行时错误"1004":对象"_Worksheet"的方法"Range"失败

如何复制:

1) 制作一个带有标签的Userform(在我的代码中名为test1)。

2) 为宏生成模块。

这是Userform和Module的代码。

用户表单

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)中看到的命名范围名称时,宏会起作用。

我已经搜索了Stackoverflow和其他资源来寻找解决方案。大多数帖子告诉我,我需要使用"Set"从一个范围中生成一个变量,但不幸的是,这还不够。我错过了一些重要的部分,我无法用手指去触摸它。

如有任何帮助,我们将不胜感激。如果有任何问题,请毫不犹豫地问。

干杯,Simon

更改

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

相关内容

最新更新