Há dias, tive necessidade de criar uma tabela, para me ir fornecendo os valores gastos em produtos para animais. O que eu pretendia, era digitar a quantidade de determinado produto numa célula, fazendo que, através dessa inserção, fosse adicionando na célula contígua a quantidade total até ao momento obtida, o que faria com que, multiplicando a quantidade total pelo valor unitário de cada produto, me devolvesse o valor total gasto até ao momento, por produto. Depois, pretendia não ter que apagar manualmente os valores inseridos, mesmo gravando e fechando. Assim, pretendia, quando o workbook fosse novamente carregado, que os valores da coluna relacionada com a quantidade do produto adquirida no dia, fossem automaticamente apagados, sem, contudo, alterar os valores totais.
Vejamos a ideia:



Mostro, de seguida, os códigos que criei, para obter o resultado desejado:
Option Explicit
‘—————————————————————————————
‘ Procedure : Worksheet_Change
‘ Author : JRod
‘ Date : 03/03/2013
‘ Purpose : Adiciona o valor inserido numa célula da coluna D ao valor que se encontra na célula correspondente da coluna E
‘—————————————————————————————
‘
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long
r = Target.Row
If Not Intersect(Target, Columns(“D:D”)) Is Nothing Then
Select Case IsNumeric(Target)
Case True: Range(“E”&r) = WorksheetFunction.Sum(Range(“D”&r), Range(“E”&r))
Case Else: ‘não faz nada
End Select
End If
End Sub
‘—————————————————————————————
‘ Procedure : Workbook_Open
‘ Author : JRod
‘ Date : 03/03/2013
‘ Purpose : Ao abrir o Workbook, limpa o conteúdo da coluna 5, ou seja, da Coluna D
‘ : tendo em consideração o total de linhas que se encontram com valores.
‘—————————————————————————————
‘
Private Sub Workbook_Open()
Dim lngLastRow As Long
lngLastRow = Cells(Rows.Count, 5).End(xlUp).Row
Range(“D2:D”&lngLastRow).ClearContents
End Sub
EXCELer Tudo sobre EXCEL em Português