2012-11-28 41 views
1

我有一個包含多個選項卡的Excel文件。我有一個工作表,其中一些代碼工作正常。該代碼還涉及一些「主」選項卡上的數據。我需要複製這張表,所以我將通用功能從那裏移到了一個模塊中。嘗試訪問同一工作表上的範圍時,現在遇到VBA 1004錯誤。當代碼從工作表移動到模塊時,VBA Excel出錯

Dim selectedRange As Range 
Set selectedRange = Worksheets(name).Range("A1", _ 
Range("A" & Rows.count).End(xlUp)) 'Error Line 

此代碼工作正常,直到我將它移動到一個模塊。如果我在它之前放置一個

Worksheets(name).Select 

,但我必須做太多次。基於這個查詢:VBA error 1004 - select method of range class failed 代碼應該工作正常,沒有.Select。只要代碼在工作表內,它就會執行。爲什麼將代碼移動到模塊會產生問題?

回答

1

U使用範圍和行屬性無對象限定符。在沒有對象限定符的情況下使用時,此屬性是ActiveSheet.Range/ActiveSheet.Rows的快捷方式。

因此,代碼執行此:

Worksheets(Name).Range("A1", ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp)) 

但是工作表(名稱)可能是從活動片不同,所以更好是:

Worksheets(Name).Range("A1", Worksheets(Name).Range("A" & Worksheets(Name).Rows.Count).End(xlUp)) 

在End With - 隨塊:

With Worksheets(name) 
     Set selectedRange = .Range("A1", .Range("A" & .Rows.Count).End(xlUp)) 
End With 

因此確保範圍/行屬性應用於工作表(名稱)工作表ob JECT。

0

當你在工作表上做事情時,你並不需要對該工作表進行明確的聲明。

但是,當處理模塊並與其他工作表交互時,您需要指定要使用的工作表。所以選擇表之前,你可以選擇的範圍。說,選擇父母之前,你選擇了孩子:) 請注意,以下只是邏輯解釋。不是確切的代碼語法。

所以我建議你創建下面的工作表變量,並設置你需要的工作表對象。

例如

Dim WS as Worksheet 
Dim selectedRange As Range 

Set WS = Sheets("Shee1") 
Set selectedRange = WS.Range("A1", _ 
Range("A" & Rows.count).End(xlUp)) 'Error Line 

否則,如果你想指所有牀單,您可以使用每個表的索引

例如ThisWorkBook.Sheets(i) 'i is an integer 然後循環或任何它認爲你的程序結構。

此外,您不必在工作表上使用Select指向該工作表中的範圍。根據上述代碼,您可以設置工作表並設置需要處理的範圍。在優化VBA執行時,select通常是一個禁忌。此外,Excel 2007不會像舊版本一樣保留活動工作表。

+2

你需要限定_every_範圍參考,因此它成爲'WS.Rows.count' –

+0

看來我錯過了你的健康評論,當我回到這裏時,我的答案和你的評論已經合併; - )謝謝@ChrisNeilson – bonCodigo

相關問題