2017-04-23 46 views
1

我正在尋找從多個工作表定義幾個動態範圍。我收到錯誤1004「應用程序或對象定義錯誤」。我的代碼適用於工作表處於活動狀態的任何範圍,並且我可以通過激活每個工作表然後定義動態範圍來使其工作。但是如果我的電子表格變得很大,這可以真正減慢我的程序。從多個表中定義動態範圍

請注意以下事項:

  1. .CurrentRegion是行不通的,因爲它會包括很多不必要的行和列。該報告將包括由於不同生產領域而重複列的區域。

有沒有更好的方法來定義我的範圍,以防止激活每個工作表?以下是我正在使用的一些代碼的示例。

Set Sony = ThisWorkbook.Worksheets("Report") 
Set Prod = ThisWorkbook.Worksheets("Prod Report") 

Prod.Activate 
Set rng1 = Prod.Range(Range("C3"), Range("C3").End(xlDown).Offset(-1, 0)) 
Set rng2 = Prod.Range(Cells(1, 1), Cells(1, 52)) 
Sony.Activate 
Set rng3 = Sony.Range(Range("B4"), Range("B4").End(xlDown).Offset(-1, 0).End(xlToRight).Offset(0, -1)) 

回答

2

確認範圍是指特定工作表,而不涉及ActiveSheet。這應該應用範圍內的括號內發生;沒有,你會有運行時錯誤。

Set rng1 = Prod.Range("C3", Prod.Range("C3").End(xlDown).Offset(-1, 0)) 
'       ^^^^^ 

Set rng2 = Prod.Range("A1", Prod.Cells(1, 52)) 
'       ^^^^^ 

Set rng3 = Sony.Range("B4", Sony.Range("B4").End(xlDown).Offset(-1, 0).End(xlToRight).Offset(0, -1)) 
'       ^^^^^ 

rng2,你也可以使用一個簡單的符號:

Set rng2 = Prod.Range("A1").Resize(1, 52) 
+0

我怎麼也不敢相信簡單的即得。謝謝你的回答! – MartyMcfly0033