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 中得到 sum(A3:A7),但 A3:A7 仍然引用 Sheet2 而不是 Sheet1。

谢谢!

4

2 回答 2

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 & ")"
于 2013-03-09T18:54:24.197 回答
1

试试这个代码 - 它使用External:=True参数.Address来检索完整地址。虽然这也包括工作簿名称,但 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从长远来看,硬编码引用可能会导致错误,因为用户(甚至在某个阶段的开发人员)可能会修改工作表结构。最佳实践是使用命名范围,即为您引用的每个单元格/范围创建一个命名范围,然后在 VBA 中使用SheetX.Range("rngStartCell")或类似方法访问它!

于 2013-03-09T21:22:16.553 回答