Word / Access VBA总计


0

我需要有关vba字表列计算的帮助。我的Word表是使用Access数据库VBA在Word模板中创建的。我需要计算表格最后一列的总和。但我的表没有明确的行数。我已经尝试了各种选项无济于事....以下创建表成功并进行计算,但只有我的表的最后两行(目前我打开的记录为3行)但不计算总和对于希望的整个专栏。我无法理解我所缺少的东西?

Dim rs2 As DAO.Recordset
Set rs2 = CurrentDb().OpenRecordset("SELECT * FROM InvoiceServiceLineItems WHERE InvoiceID=" & Forms!invoicedetail!ID, dbOpenSnapshot)

   With rs2
    .MoveLast
        If Not .EOF Then
            .MoveLast
            .MoveFirst
        End If
    End With

Dim indx As Integer
For indx = 1 To rs2.RecordCount
    With oDoc.Tables(3)
        .Cell(indx, 1).Range.Text = Nz(rs2![LineItemCode], "")
        .Cell(indx, 2).Range.Text = Nz(rs2![Description], "")
        .Cell(indx, 3).Range.Text = Nz(rs2![InitialTerm], "")
        .Cell(indx, 4).Range.Text = Format(Nz(rs2![UnitPrice], ""), "Currency")
        .Cell(indx, 5).Range.Text = Nz(rs2![Quantity], "")
        .Cell(indx, 6).Range.Text = Format(Nz(rs2![LineTotal], ""), "Currency")
        If rs2.AbsolutePosition <> rs2.RecordCount = -1 Then .Columns(1).Cells.Add

        .Cell(indx, 6).AutoSum
    End With
    rs2.MoveNext
Next indx

我一开始并不遵循逻辑。你.MoveLast,然后检查.EOF。然后,如果它不是.EOF(怎么会不是?)你做另一个.MoveLast?那么一个.MoveFirst?那么,如果第一个.MoveLast完成它应该做的事情并移动到最后一条记录,那么记录集如何从一开始就开始 - 这就是每次应该发生的事情。你说它只处理最后两个记录,但据我估算,它应该只处理一个记录 - 最后一个记录。也许你只需要删除第一个.MoveLast或者无条件地放置.MoveFirst。
Bill Hileman

谢谢比尔。我尝试了各种不同的变化,包括你的见解,但仍然没有得到我的全部预期总数。有记录,但只有两个正在总结!将继续战斗。我对可能的对象很模糊,但如果我成功的话,我会在这里添加解决方案。
Declan G

Answers:


0

据推测,您可能希望在循环外设置autosum,并且总和的单元格索引将是“recordcount + 1”。

您也可以使用单独的查询在结尾处进行总结,例如

SELECT sum(LineTotal) as querySumTotal FROM InvoiceServiceLineItems WHERE InvoiceID=" & Forms!invoicedetail!ID
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.