我需要有关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