如何通过工作表索引号实现Excel VBA多表指定单元格求和
Excel VBA 按工作表索引号求和(4-13工作表的R2C40单元格)
完全可以通过工作表索引号实现这个需求,之前的错误是写法不符合VBA语法规范,下面是两种可行的实现方式:
方法一:循环累加(更稳妥,支持边界检查)
Sub SumBySheetIndex() Dim total As Double Dim i As Integer total = 0 ' 遍历索引号4到13的工作表 For i = 4 To 13 ' 避免索引超出当前工作簿的工作表总数 If i <= ThisWorkbook.Sheets.Count Then ' Cells(行号, 列号)对应R2C40(第2行第40列,即AD2单元格) total = total + ThisWorkbook.Sheets(i).Cells(2, 40).Value End If Next i ' 将求和结果写入当前活动工作表的A1单元格(可自行修改目标位置) ActiveSheet.Range("A1").Value = total End Sub
方法二:构建联合区域后求和
Sub SumBySheetIndex_V2() Dim sumRange As Range Dim i As Integer ' 初始化求和区域为第4个工作表的目标单元格 Set sumRange = ThisWorkbook.Sheets(4).Cells(2, 40) ' 依次合并后续工作表的目标单元格 For i = 5 To 13 If i <= ThisWorkbook.Sheets.Count Then Set sumRange = Union(sumRange, ThisWorkbook.Sheets(i).Cells(2, 40)) End If Next i ' 调用工作表函数求和并输出 ActiveSheet.Range("A1").Value = WorksheetFunction.Sum(sumRange) End Sub
之前错误的原因说明
- 第一种错误:误将
Sheets(4)当作工作表名称使用,比如写成Sum(Sheets("Sheets(4)").Cells(2,40)),这会让VBA去查找名为"Sheets(4)"的工作表,而非索引号为4的工作表。 - 438错误:通常是因为引用单元格的方式错误,比如直接写
Sheets(4).R2C40,VBA不支持这种直接的R1C1格式属性调用,必须通过Cells(2,40)或者Range("AD2")来引用单元格。
内容的提问来源于stack exchange,提问作者Maxence G
相关产品推荐
相关产品推荐

