VBA:不同的工作表,相同的命名单元格范围?

我正在使用下面的代码(工作表3代码)的第二部分突出显示返回“范围object_global失败”的代码。

会使用相同的命名范围,但在不同的工作表上,因为我已经做了下面这样做?

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

感谢您的任何反馈!

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

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

  • 工作簿级别
  • 图纸级别

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

作为例子,以下是可以的:

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

但以下不是:

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

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

工作簿范围级别

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

工作表范围级别

从工作表中的任何单元格开始,只要在工作簿级别没有其他相同的命名范围: =MyRange

从任何工作表中的任何单元格,或者在工作簿级别有相同的命名范围: ='Sheet1!myRange'

最后,如果确实有两个完全相同的范围名称,其中一个范围在工作簿级别,另一个在工作表级别,如果您没有限定工作表,则工作簿范围范围将用作默认范围。

你的代码正在抛出,

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

这是由于每个命令的后半部分缺less定义的父级工作表。

 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语句定义了父工作表。 每个Range对象的前缀都是一个句点(又名句号. ),它明确地引用了With … End With指出的父级工作表。

如果select了更简单的Range.FillDown方法 ,则可以避免使用With … End With,因为范围只需要引用一次。

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

最后,下面的例子说明了如果你select修复原来的代码而不是上面的代码,你的代码的工作是什么。

 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