2015-10-13 104 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 
相關問題