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

标签 vba excel variables named-ranges

我对 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/

相关文章:

vba - 如何在VBA中实现ctrl+shift+down?

javascript - 如何在异步回调中捕获局部变量值

c - 使用变量

excel - 使用 FindNext 的 UDF 似乎在没有警告的情况下中止

VBA 代码滞后 - 我怎样才能加快速度?

java - Json转excel使用java

php - 在函数中的方法之外访问 php 变量

c# - 如何将参数从 Excel 中的 VBA 脚本作为参数传递到外部可执行文件 (C#)?

sql - OpenRecordSet 的数据类型不匹配错误

mysql - 无法从不同区域的工作站连接到 MySQL 服务器