2015-10-13 165 views
4

我正在使用下面的代码(工作表3代码)的第二部分突出显示返回“object_global范围失败”的代码。VBA:不同的工作表,相同的命名单元格范围?

会使用相同的命名范围,但在不同的工作表上,正如我在下面所做的那样导致这种情况?

Worksheets(2).Range("LTSDI").AutoFill Destination:=Range("LTSDI:LTEDI"), Type:=xlFillDefault 

Worksheets(3).Range("LTSDI").AutoFill Destination:=Range("LTSDI:LTEDI"), Type:=xlFillDefault 

感谢您的任何反馈!

+1

鉴于指定的范围是特定于工作表和范围,是的。 – findwindow

+2

命名范围可以是特定于该页面的,这意味着该页面上的公式只能调用它,或者特定于工作簿,这意味着可以从工作簿的任何位置调用它。查看哪些转到公式====>名称管理器并查看命名范围的属性。 –

+0

最有可能的是。您可以检查名称的范围并更改为工作簿,或者只是获取这两个范围的字符串地址,并将这些地址放入您的'Range'定义中。 – Ambie

回答

5

为了比上面的评论更清楚,命名范围的工作方式如下。

命名范围可以具有2个范围:

  • 簿等级
  • 表等级

Excel允许相同的工作簿中相同的命名范围为,只要它具有不同的范围。换句话说,Excel不允许在工作簿级别或工作表名称中使用相同的范围名称。

作为说明,以下是好的:

  • myRange = Sheet 1中1 $ A $范围:!工作簿
  • myRange = Sheet2的$ A $ 1范围:Sheet 2中

但是以下不是:

  • myRange = Sheet1!$ A $ 1适用范围:工作簿
  • myRange = Sheet2!$ A $ 1范围:工作簿

所有这一切说,指的命名范围的方式如下:

工作簿范围级别

从任何表的任意单元格:=MyRange

工作表作用域级别

从工作表中的任何细胞,只要没有其他 相同命名区域作用域在工作簿级别:=MyRange

从任何细胞的任何工作表内,或者如果有一个相同的命名 范围作用域在工作簿级别:='Sheet1!myRange'

最后,如果你有两个相同的区域名称,一个作用域在工作簿级别,一个在表级别,如果不符合条件的表,工作簿作用域范围将被用作默认值。

2

您的代码抛出,

运行时错误“1004”:
范围类的 自动填充方法失败

这是由于缺乏定义父表的每个命令的后半部分。

With Worksheets(2) 
    .Range("LTSDI").AutoFill Destination:=.Range("LTSDI:LTEDI"), Type:=xlFillDefault 
End With 

With Worksheets(3) 
    .Range("LTSDI").AutoFill Destination:=.Range("LTSDI:LTEDI"), Type:=xlFillDefault 
End With 

以上定义了父工作表,其中包含With ... End With statement。每个Range object都以一个句点(又名句号.)为前缀,它明确引用With ... End With指出的父级工作表。

如果您选择了更简单的Range.FillDown method,则可以避免With ... End With,因为范围只需要引用一次。

Worksheets(2).Range("LTSDI:LTEDI").FillDown 
Worksheets(3).Range("LTSDI:LTEDI").FillDown 

最后,下面说明了什么是必要的,如果你选择修复,而不是上面的一个原代码工作。

Worksheets(2).Range("LTSDI").AutoFill Destination:=Worksheets(2).Range("LTSDI:LTEDI"), Type:=xlFillDefault 
Worksheets(3).Range("LTSDI").AutoFill Destination:=Worksheets(3).Range("LTSDI:LTEDI"), Type:=xlFillDefault 
相关问题