2013-03-09 72 views
0

我試圖讓這個代碼爲總結細胞的活動:總結細胞偏移

Worksheets("Sheet2").Range("C3").Offset(i, j).Formula = "=Sum(" 
&Worksheets("Sheet1").Range("A3").Offset(2*i,j).Address & ":" & 
Worksheets("Sheet1").Range("A7").Offset(2*i,j).Address & ")" 

它不斷給我正確的細胞,但在錯誤的表。因此,對於第一次迭代,我在Sheet2的單元格C3中得到總和(A3:A7),但A3:A7保持對Sheet2而不是Sheet1的引用。

謝謝!

回答

2

您還需要在公式中指定工作表的名稱。如果你寫你這樣的代碼將工作:

Worksheets("Sheet2").Range("C3").Offset(i, j).Formula = "=Sum(Sheet1!" & _ 
Worksheets("Sheet1").Range("A3").Offset(2 * i, j).Address & ":" & _ 
Worksheets("Sheet1").Range("A7").Offset(2 * i, j).Address & ")" 
1

試試這個代碼 - 它使用的.AddressExternal:=True參數檢索的詳細地址。雖然這也包括工作簿名稱,但Excel會自動刪除它,所以最終使用Sheet1!A3。另外請注意,我使用的範圍A3:A7源作爲.Address可以處理多單元格區域,你不需要手動照顧它:

Sheets("Sheet2").Range("C3").Offset(i, j).Formula = "=SUM(" & _ 
    Sheets("Sheet1").Range("A3:A7").Offset(2 * i, j).Address(External:=True) & ")" 

要知道,硬編碼引用,如A3可導致因爲用戶(甚至某個階段的開發人員)可能會修改工作表結構。最好的做法是使用命名範圍,即爲每個引用的單元格/範圍創建一個命名範圍,然後使用SheetX.Range("rngStartCell")或類似軟件在VBA中訪問它!