Questão Word / Access VBA total


Preciso de ajuda com o cálculo da coluna da tabela de palavras vba. Minha tabela do Word é criada em um modelo do Word usando o VBA do banco de dados do Access. Eu preciso calcular a soma para a última coluna da tabela. Mas minha tabela não tem um número definido de linhas. Eu tentei várias opções sem sucesso .... O seguinte cria a tabela com sucesso e faz um cálculo, mas apenas as duas últimas linhas da minha tabela (atualmente 3 linhas para o registro que estou em), mas não calcula a soma para toda a coluna como esperado. Eu não posso descobrir o que estou perdendo?

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

0


origem


Eu não sigo a lógica no começo. Você .MoveLast, então verifique por .EOF. Então, se não for .EOF (como não seria?) Você faz outro .MoveLast? então um .MoveFirst? Então, como o conjunto de registros começa no início se o primeiro .MoveLast faz o que deve fazer e se move para o último registro - que é o que deveria estar acontecendo o tempo todo. Você diz que está processando apenas os dois últimos registros, mas, pelo meu cálculo, só deve processar um registro - o último. Talvez você só precise remover o primeiro .MoveLast OU colocar o .MoveFirst incondicionalmente depois de tudo. - Bill Hileman
Obrigado Bill. Eu tentei diferentes variações de tudo, incluindo sua visão, mas ainda não obtive meu total total esperado. Registros estão lá, mas apenas dois estão sendo somados! Vai continuar lutando. Eu sou vago sobre os objetos possíveis, mas vou adicionar solução aqui se eu tiver sucesso. - Declan G


Respostas:


Presumivelmente, você desejaria definir o autosum fora do loop e, também, o índice de células para a soma total seria "recordcount + 1".

Você também pode fazer a soma no final usando uma consulta separada, como

SELECT sum(LineTotal) as querySumTotal FROM InvoiceServiceLineItems WHERE InvoiceID=" & Forms!invoicedetail!ID

0