excel - 对象分配问题——为什么 Sheets([SheetName]) 不起作用?
问题描述
我正在尝试将工作簿中的一个工作表复制/粘贴到同一工作簿中的另一个工作表。在尝试分配我的范围时,我遇到了以下错误非常令人沮丧的问题:
运行时错误“438”:对象不支持此属性或方法。
Dim c As Range
Dim ws1 As Worksheet
Dim ws2 As Range
Dim tgt As Range
Set ws1 = Sheets("Sheet 1")
Set c = ws1.Range("Named_Range").Cells(1, 1)
Set tgt = ws1.Range(c, c.Cells(10, 1)) 'Purpose is to create a range with the first 10 cells of Named_Range, but I need it to be dynamic
'To test that range is being assigned correctly
tgt.Select
此时我得到了上面引用的错误代码。但是,只要我添加了代码就可以运行
ws1.Select
上面的“设置 c = ...”
知道发生了什么吗?我的理解是,不建议以这种方式使用“选择”,而且我也不想在选择特定表格时乱七八糟,因为我最终试图在复制/粘贴时在它们之间切换。
解决方案
Worksheet
不同于Range
,ws1
应将 a 定义为 aWorksheet
。- 命名范围的名称中不能有空格。这有效:
Sub TestMe()
Dim c As Range
Dim ws1 As Worksheet
Dim ws2 As Range
Dim tgt As Range
Set ws1 = Sheets("Sheet 1")
Set c = ws1.Range("Named_Range_A").Cells(1, 1)
Set tgt = ws1.Range(c, c.Cells(10, 1))
Debug.Print tgt.Address
End Sub
作为额外的奖励 -Worksheet
是一个不同的对象Sheet
,您可以考虑使用Set ws1 = Worksheets("Sheet 1")
. Sheet
对象是Worksheet
or ,因此Chart
更明确一点可能会很好。
推荐阅读
- android - Recycler View Not Reading Big Volley data with params in android
- amazon-web-services - 在 AWS 上按顺序激活 2 个或更多数据管道的最佳方法是什么?
- sql - Gettint 尝试在删除行 sql 后捕获事件
- ios - 当应用程序的语言为阿拉伯语时,日期转换为阿拉伯数字
- regex - perl6 语法中的 <.ident> 函数/捕获
- python - 资源失败的Django路径?
- cassandra - 在 Cassandra 中使用 TTL 和 Delete 哪个更好?
- javascript - 当我将标头附加到请求时,Ajax 发布请求不起作用
- android - 在独立工具栏中添加菜单?
- neo4j - 在 neo4j 中读取节点的属性