Subtração entre dat...
 
Notifications
Clear all

Subtração entre datas! vba Excel!

13 Posts
3 Usuários
0 Reactions
2,065 Visualizações
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

Prezados, bom dia!

O arquivo anexado contém uma userform que desenvolvi para somar uma data com a quantidade de dias, exemplo, 25/8/2014 + 3 = 28/8/2014. Isso eu já consegui.

O que eu preciso agora é fazer com que, neste mesmo projeto, ao clicar no sinal de SUBTRAÇÃO, o mesmo subtraia o valor da data a um valor em dias.

exemplo 1: 25/8/2014 - 15 = 10/8/2014

exemplo 2: 25/8/2014 - 20/8/2014 = 05/8/2014

Como faço?

 
Postado : 12/08/2014 6:53 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja se é isso.

 
Postado : 12/08/2014 8:00 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Lorenzon,

Bom Dia!

Veja se é assim.

 
Postado : 12/08/2014 8:04 am
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

Gênios!

 
Postado : 12/08/2014 8:11 am
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

Só não conseguimos subtrair uma data pela outra, como descrito no exemplo 2:

exemplo 2: 25/8/2014 - 20/8/2014 = 05/8/2014

A única coisa que fiz, afim de facilitar ainda mais os cálculos, foi a linha em negrito:

Private Sub Image1_Click()
Label1.Caption = "+"

Call AtualizaData
End Sub
Private Sub Image2_Click()
Label1.Caption = "-"

Call AtualizaData

 
Postado : 12/08/2014 8:18 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

25/8/2014 - 20/8/2014 = 05/8/2014

isso é errado né !?
tipo, 25/8/2014 - 20/8/2014 = 5/1/1900

Pensa.... num calendário que começa em 1900, isso faria sentido... e a macro já faz...

 
Postado : 12/08/2014 9:06 am
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

Fernando,

É isso mesmo. O resultado a ser apresentado entre a subtração abaixo é 5. Acho que o confundi ao escrever o resultado 05/08/2014.

25/8/2014 - 20/8/2014 = 5

 
Postado : 12/08/2014 12:03 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

a macro está formatando o resultado como data...
é possível corrigir.... quer ?

 
Postado : 12/08/2014 12:07 pm
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

Fernando,

Desculpa-me, mas, utilizando o exemplo que você postou, o resultado apresentado no textbox3, na subtração de 28/8/2014 - 23/08/2014, é = ""

Em contrapartida, caso eu subtrair/adicionar, 28/08/2014 - 5 = 23/08/2014 e 28/08/2014 + 5 = 02/09/2014, ou seja, o código funciona perfeitamente.

 
Postado : 12/08/2014 12:28 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

é pq nessa linha:

IsDate(Me.TextBox1) And IsNumeric(Me.TextBox2)

o código impede a continuação de conteúdo 26/5/2014 no textbox2, pq não é numérico...

 
Postado : 12/08/2014 1:07 pm
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

Entendido.

Resolvido o problema. Fiz esta adaptação e obtive êxito:

Private Sub AtualizaData()
If IsDate(Me.TextBox1) And IsNumeric(Me.TextBox2) And Label1.Caption = "+" Then
Me.TextBox3 = DateAdd("d", Me.TextBox2, Me.TextBox1)
ElseIf IsDate(Me.TextBox1) And IsNumeric(Me.TextBox2) And Label1.Caption = "-" Then
Me.TextBox3 = CDate(TextBox1.Text) - Val(TextBox2.Text) 'DateAdd("d", Me.TextBox2, Me.TextBox1)
Exit Sub

End If

If IsDate(Me.TextBox1) And IsDate(Me.TextBox2) And Label1.Caption = "-" Then
Me.TextBox3 = CDate(TextBox1.Text) - Val(TextBox2.Text) 'DateAdd("d", Me.TextBox2, Me.TextBox1)

End If

End Sub

 
Postado : 12/08/2014 1:57 pm
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

Bastaria eu saber como formatar o valor do textbox3, em números, nos casos de datas - datas.

 
Postado : 12/08/2014 2:15 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Formate como:
"General"

Trabalhar com datas no Excel é dificil. Mas dominar o conceito é fantástico!

O mais importante é lembrar que para cada dia do calendário, desde 1/1/1900, o Excel associa um número crescente começando em 1. O que explica aquele número aproximado de 40000 que você vê de vez em quando. Isso nada mais é do que o número da data, se contarmos dia a dia desde o dia 1/1/1900.

Os decimais representam horas de cada dia, ou seja, 0,5 significa meio dia e 0,75 represente 6pm.
E há um limite para o numero de dias que agora, bêbado de sono, eu não lembro.

aí sim vc entenderá como o Excel faz o cálculo de diferença entre datas. Ao combinar formatação e soma ou subtração de datas, tudo passa a fazer sentido.

FF

 
Postado : 13/08/2014 12:17 am