Notifications
Clear all

COMO SOMAR DE ACORDO COM A QUEBRA DE PÁGINA?

3 Posts
2 Usuários
0 Reactions
1,170 Visualizações
(@viniciussn)
Posts: 11
Active Member
Topic starter
 

Boa tarde amigos!

Estou tendo dificuldades com uma planilha. Gostaria de conseguir somar vários números de acordo com a quebra de página. Não entendo muito bem de VBA, mas consegui um código na internet que quase me atendeu.

Por exemplo, tenho uma planilha com vários números na coluna "D" que vão de D6 até D116. Eu gostaria de uma macro que realize a soma (subtotal) de cada página de acordo com a quebra de página. Nesse exemplo eu possuo uma quebra de página em "D50", então gostaria que fosse realizado a soma de "D6:D50". A próxima quebra de página é na "D100", então eu gostaria que fosse realizado uma soma de "D51:D100". E no final de todas quebras de página me desse um total geral com todas as somas acima.

Eu tenho um código que quase me atendeu, porém quando chega no último número da página, a soma está sobrepondo o mesmo e com isso não está somando ele. Se alguém puder me ajudar eu agradeço muito mesmo. Estou enviado uma "PLANILHA TESTE" para tentar entender o problema que ocorre.

Segue abaixo também o código separado:

Sub Inserir_subtotais_em_quebra_paginas()
Dim i As Byte
Dim vUltima_Linha As Integer, vLinha As Integer, vPagina As Integer
Dim vTotal As Double

vLinha = 6
vUltima_Linha = Range("D1048576").End(xlUp).Row

ActiveSheet.HPageBreaks.Add Before:=Cells(vUltima_Linha + 1, 4)
vTotal = Application.WorksheetFunction.Sum(Range("D6:D" & vUltima_Linha))

Application.ScreenUpdating = False
For i = 1 To ActiveSheet.HPageBreaks.Count
vPagina = ActiveSheet.HPageBreaks(i).Location.Row - 1
Rows(vPagina).Insert

With Cells(vPagina, 4)
   .Value = Application.WorksheetFunction.Sum(Range("D" & vLinha & ":D" & vPagina - 1))
   .Interior.ColorIndex = 3
End With

vLinha = vPagina + 1
Next i

With Cells(vPagina + 1, 4)
   .Value = vTotal
   .Interior.ColorIndex = 5
End With

Application.ScreenUpdating = True
End Sub
 
Postado : 19/06/2017 1:00 pm
(@osvaldomp)
Posts: 858
Prominent Member
 

Experimente:

substitua esta linha

vPagina = ActiveSheet.HPageBreaks(i).Location.Row - 1

por esta

vPagina = ActiveSheet.HPageBreaks(i).Location.Row - 1 - (i = ActiveSheet.HPageBreaks.Count)

Osvaldo

 
Postado : 19/06/2017 3:17 pm
(@viniciussn)
Posts: 11
Active Member
Topic starter
 

Osvaldomp, muito obrigado!

Gostaria ainda de mais duas respostas se possível:

Pergunta 1: Sabe me falar se teria como também eu fazer o seguinte: Por exemplo, o "SUBTOTAL" da primeira página (quebra de página) está na célula "D50", eu gostaria que na célula "C50" aparecesse a palavra "SUBTOTAL". E a partir das próximas quebras de página se repetisse isso. E na última linha (última página) aparecesse também a palavra "TOTAL" na célula "C...".

Pergunta 2: Teria como também por exemplo, executei a macro uma vez na planilha. Após isso inseri uma outra linha em um local qualquer e inseri um novo número na coluna "D", e que após esse novo número adicionado eu pudesse executar a macro novamente sem que aparecesse outro "SUBTOTAL" e outro "TOTAL", pois o que ocorre é isso. Gostaria que só atualizasse esses valores de acordo com novos dados inseridos (adicionando linha nova) ou mesmo alterando qualquer valor.

Agradeço sua resposta.

 
Postado : 19/06/2017 4:05 pm