我正在使用返回" object_global范围失败的代码"以下代码的第二部分(工作表3代码)突出显示。
使用相同的命名范围,但在不同的工作表上,正如我在下面所做的那样导致这个?
Worksheets(2).Range("LTSDI").AutoFill Destination:=Range("LTSDI:LTEDI"), Type:=xlFillDefault
Worksheets(3).Range("LTSDI").AutoFill Destination:=Range("LTSDI:LTEDI"), Type:=xlFillDefault
感谢您的反馈!
答案 0 :(得分:5)
为了比上面的评论更清楚,命名范围以下列方式工作。
命名范围可以有2个范围:
Excel允许在同一工作簿中使用相同的命名范围,只要它具有不同的范围。换句话说,Excel不允许在工作簿级别或工作表名称中使用相同的范围名称。
作为一个例子,以下是可以的:
但以下不是:
所有这一切,引用命名范围的方式如下:
工作簿范围级别
来自任何工作表上的任何单元格:
=MyRange
工作表范围级别
从工作表中的任何单元格开始,只要没有其他单元格 在工作簿级别确定相同的命名范围:
=MyRange
从任何工作表中的任何单元格中,或者如果存在相同的名称 范围限定在工作簿级别:
='Sheet1!myRange'
最后,如果您有两个相同的范围名称,一个位于工作簿级别,另一个位于工作表级别,如果您不限定工作表,则工作簿范围范围将用作默认值。
答案 1 :(得分:2)
你的代码正在抛出,
运行时错误'1004':
Range类的自动填充方法失败
这是由于每个命令的后半部分都没有定义的父工作表。
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