2013-03-09 58 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中访问它!