我对 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) 中看到的命名范围名称时,宏就会起作用。
我搜索了 Stackoverflow 和其他资源来寻找解决方案。大多数帖子告诉我,我需要使用“Set”从一个范围中创建一个变量,但不幸的是这还不够。我错过了一些重要的部分,但我无法指出它。
任何帮助将不胜感激。如果有任何问题,请随时询问。
干杯, 西蒙
最佳答案
改变
Format(wsTest.Range("rnTest")(1).Value, "$#,##0")
至
Format(rnTest(1).Value, "$#,##0")
rnTest
是您要定位的范围对象的名称,但是当您在 Range()
方法中将其放在引号中传递时,它会被视为文字字符串。除非您还有一个名为“rnTest”的命名范围,否则这总是会失败。
正如您从上面的示例中看到的,您现在可以直接访问 rnTest
对象,因为引用之前已Set。希望这是有道理的。
关于vba - 用户窗体中命名范围 (Excel) 的变量给我一个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36309199/