You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VBA中对关闭工作簿记录集内的单元格求和并写入指定单元格

从关闭工作簿提取数据并求和的VBA解决方案

下面给你两种实现需求的方法,不用纠结DSUM,直接用SQL或者VBA累加就能搞定:

方法一:用SQL直接求和(推荐,效率更高)

既然已经用了ADODB连接,直接在SQL语句里计算总和,不用把12条数据都读出来,一步到位得到结果:

Option Explicit
Sub DataIzZatvorenogFila()
    Dim con As ADODB.Connection
    Dim rst As ADODB.Recordset

    Set con = New ADODB.Connection
    Set rst = New ADODB.Recordset

    con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source= W:\Materijalno\MG i AMBALAŽNI PAPIR\2025\FLUTING\FLUTING.xlsm; " & _
        "Extended Properties='Excel 12.0 Xml;HDR=NO';"

    con.Open

    ' 用SUM函数计算E29:E40的总和,HDR=NO时列名默认是F1
    rst.Source = "SELECT SUM(F1) FROM [ZBIRNA$E29:E40]"
    rst.Open

    ' 把求和结果写入Sheet3的D2单元格
    If Not rst.EOF Then Sheet3.Range("D2").Value = rst.Fields(0).Value

    rst.Close
    con.Close
End Sub

说明:因为你设置了HDR=NO(无表头),OLEDB会把这个区域的第一列命名为F1,所以SQL里用SUM(F1)来计算该列的总和。

方法二:读取所有数据后再求和(适合不想改SQL的情况)

如果还是想先把12条数据读进来,再用VBA计算总和,也可以这么改:

Option Explicit
Sub DataIzZatvorenogFila()
    Dim con As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim total As Double

    Set con = New ADODB.Connection
    Set rst = New ADODB.Recordset

    con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source= W:\Materijalno\MG i AMBALAŽNI PAPIR\2025\FLUTING\FLUTING.xlsm; " & _
        "Extended Properties='Excel 12.0 Xml;HDR=NO';"

    con.Open

    rst.Source = "[ZBIRNA$E29:E40]"
    rst.Open

    ' 遍历记录集累加求和
    total = 0
    Do While Not rst.EOF
        total = total + Nz(rst.Fields(0).Value, 0) ' Nz处理空值,避免报错
        rst.MoveNext
    Loop

    ' 把总和写入D2
    Sheet3.Range("D2").Value = total

    rst.Close
    con.Close
End Sub

说明:用Nz函数可以处理区域里的空单元格,防止空值导致求和出错。

内容的提问来源于stack exchange,提问作者Jelovac Maglaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 19:46:18