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