Application.WorksheetFunction.Sum在循环中

Som*_*ody 2 excel vba excel-vba

我有这个代码从sql查询中检索一些数据并将其放在Excel工作表中:

   I = 4
 Do While Not rs.EOF
  I = I + 1
  Sheet1.Range("A" & I).Value = rs(0)
  Sheet1.Range("B" & I).Value = rs(1)
  Sheet1.Range("C" & I).Value = rs(2)
  Sheet1.Range("D" & I).Value = rs(3)
  Sheet1.Range("E" & I).Value = rs(4)
  Sheet1.Range("F" & I).Value = rs(5)
  Sheet1.Range("G" & I).Value = rs(6)
  Sheet1.Range("H" & I).Value = rs(7)
  Sheet1.Range("I" & I).Value = rs(8)
  Sheet1.Range("J" & I).Value = rs(9)
  Sheet1.Range("K" & I).Value = rs(10)
  Sheet1.Range("L" & I).Value = rs(11)
  Sheet1.Range("M" & I).Value = rs(12)
  Sheet1.Range("N" & I).Value = rs(13)
  Sheet1.Range("O" & I).Value = rs(14)
  Sheet1.Range("P" & I).Value = rs(15)
  Sheet1.Range("Q" & I).Value = Application.WorksheetFunction.Sum(Sheet1.Range("E" & I), Sheet1.Range("P" & I))
  'Sheet1.Range("Q" & I).Value = Sheet1.Range("E" & I).Value + Sheet1.Range("F" & I).Value + Sheet1.Range("G" & I).Value + Sheet1.Range("H" & I).Value
  rs.MoveNext
 Loop
Run Code Online (Sandbox Code Playgroud)

现在,我试图将一系列列从col"E"加到col"P"但是它不起作用,它只是对那些单元格求和("E"和"I"和"P"和I),而不是范围.

有什么帮助吗?

JMa*_*Max 6

首先,您可以使用以下with语句优化和清理代码:

使用来清理代码 with

不要这样做

Sheet1.Range("A" & I).Value = rs(0)
Sheet1.Range("B" & I).Value = rs(1)
Sheet1.Range("C" & I).Value = rs(2)
...
Run Code Online (Sandbox Code Playgroud)

With Sheet1
    .Range("A" & I).Value = rs(0)
    .Range("B" & I).Value = rs(1)
    .Range("C" & I).Value = rs(2)
    ...
End With
Run Code Online (Sandbox Code Playgroud)

求和范围而不是单元格

了解您的原始陈述

在您的原始声明中:

Application.WorksheetFunction.Sum(Sheet1.Range("E" & I), Sheet1.Range("P" & I))
Run Code Online (Sandbox Code Playgroud)

您正在使用多个参数调用工作表函数(正如您所做的那样,SUM(E1, P1)但您希望对范围求和,即SUM(E1:P1).

解决您的问题

更好的尝试:

Application.WorksheetFunction.Sum(Sheet1.Range("E" & I & ":P" & I))
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以通过以下方式定义Range:

With Sheet1
    Application.WorksheetFunction.Sum(.Range(.Cells(I, "E"), .Cells(I, "P"))
End With
Run Code Online (Sandbox Code Playgroud)

后者非常有用,因为您可以使用.Cells字母或Long作为列.