首页 > 解决方案 > 对象分配问题——为什么 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 = ...”

知道发生了什么吗?我的理解是,不建议以这种方式使用“选择”,而且我也不想在选择特定表格时乱七八糟,因为我最终试图在复制/粘贴时在它们之间切换。

标签: excelvba

解决方案


  1. Worksheet不同于Rangews1应将 a 定义为 a Worksheet
  2. 命名范围的名称中不能有空格。这有效:

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对象是Worksheetor ,因此Chart更明确一点可能会很好。


推荐阅读