Notifications
Clear all

Subtrair saldo na label

7 Posts
3 Usuários
0 Reactions
2,277 Visualizações
(@joilsondo)
Posts: 47
Trusted Member
Topic starter
 

Galera, boa tarde!
Tenho o código abaixo que ao sair do Textbox “Código” ele me dá o saldo em uma label (Label12). Este saldo esta na planilha já.

Código:

Private Sub CODIGO_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Dim UltimaLinha, i As Long

UltimaLinha = Sheets("Resumo").Cells(Cells.Rows.Count, 1).End(xlUp).Row
If UltimaLinha < 65000 Then UltimaLinha = 65000

For i = 5 To UltimaLinha
If Range("A" & i).Value = Txtnforigem.Text And CODIGO.Text = Range("C" & i).Value Then
Label12.Caption = Range("G" & i).Value

Exit For
End If
Next

Label13.Visible = True
Label12.Visible = True

'Txtqtd = ""
'Txtunit = ""
'Txttotprod = ""
'Txtqtd.SetFocus

End Sub

Gostaria de poder ao preencher outro textbox da quantidade nova, ele já pegasse esse saldo atual da Label12 e subtraísse o valor que eu colocar no textbox quantidade.

Exemplo: Se o saldo informado na label for 5240, e eu informar 240 no textbox qtde, gostaria de colocar em uma nova label o valor de 5000.

Como poderia fazer isto? Lembrando que o primeiro saldo eu consegui fazer aparecer na label12.caption porque ele já está gravado na planilha.

Obrigado.

 
Postado : 17/08/2015 2:21 pm
(@mprudencio)
Posts: 0
New Member
 

Já tentou armazenar esse novo valor em outra cel?

 
Postado : 17/08/2015 2:45 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Pode-se efetuar o calculo normalmente, porem tento em mente que tanto TextBox e Label, por default "devolvem" os valores como String/Texto.
Então defina o evento que deseja efetuar sua conta (soma subtração etc..), talvez o Before_Update do Txt onde informa novo valor.
Utilize uma função de conversão tipo Cdec ou Ccur entre outras (utilize o help do VBA para maiores informações), ficaria +/- assim:
suanovalabel.caption= cdec(suaprimeiralabel.caption) - cdec(seunovotextbox.text)

 
Postado : 17/08/2015 3:22 pm
(@joilsondo)
Posts: 47
Trusted Member
Topic starter
 

Reinaldo, do jeito que você me apresentou deu certo a subtração, só que estou com um problemas.

O código que postei acima para mostrar o saldo na label, tem horas que funciona e aparece o saldo e tem horas que não funciona.
Tem horas que dá certinho e me apresenta o saldo, porém tem horas que a label fica em branco e não traz o saldo.

Será que é algo que tenho que ativar?? ou Modificar???

Segue o código:

Public numero As Integer

Private Sub CODIGO_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim UltimaLinha, i As Long

UltimaLinha = Sheets("Resumo").Cells(Cells.Rows.Count, 1).End(xlUp).Row
If UltimaLinha < 6000 Then UltimaLinha = 6000

For i = 5 To UltimaLinha
If Range("A" & i).Value = Txtnforigem.Text And CODIGO.Text = Range("C" & i).Value Then
Label12.Caption = Range("G" & i).Value

Exit For
End If
Next


End Sub

Obrigado.

 
Postado : 18/08/2015 7:41 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bem isso já e outro problema/duvida.
No achometro (sem poder verificar/analisar rotina vs planilha, apenas "acho que");o que se pode concluir/achar e que os valores comparados Txtnforigem e/ou CODIGO não foram encontrados, assim o Labell2 ficara vazio, quando encontrados então o label12 assume o valor. Verifique

 
Postado : 18/08/2015 9:25 am
(@joilsondo)
Posts: 47
Trusted Member
Topic starter
 

Reinaldo, agradeço muito a vossa atenção, mas consegui resolver, bastou colocar uma parte no código:

Sheets("Resumo").Select

o novo código completo, ficou assim:

Public numero As Integer

Private Sub CODIGO_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim UltimaLinha, i As Long

UltimaLinha = Sheets("Resumo").Cells(Cells.Rows.Count, 1).End(xlUp).Row
If UltimaLinha < 6000 Then UltimaLinha = 6000

Sheets("Resumo").Select
For i = 1 To UltimaLinha
If Range("A" & i).Value = Txtnforigem.Text And codigo.Text = Range("C" & i).Value Then
Label12.Caption = Range("G" & i).Value

Exit For
End If
Next


End Sub

Obrigado.

 
Postado : 18/08/2015 9:29 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Joilson, apesar de ter setado como resolvido e terem trancado o tópico, resolvi fazer umas observações.

Primeiro, não vi relacionamento da rotina que diz que resolveu com o requerido no assunto "Subtrair saldo na Label", acredito que não tenha conseguido implementar a dica do Reinaldo e está fazendo o calculo direto na planilha na Coluna "G" e carregando a Label.
Ok, se desta forma resolveu sua questão ótimo, se depois quiser implementar a dica do Reinaldo podemos ajudar, é só abri um novo tópico.

Agora quanto a sua solução de acrescentar a linha :
Sheets("Resumo").Select
Só para compreensão, sub entende-se que está executando o formulário de outra aba e buscando o resultado na aba Resumo, sendo assim, na linha que capta a última linha preenchida, temos :
UltimaLinha = Sheets("Resumo").Cells(Cells.Rows.Count, 1).End(xlUp).Row - veja que aqui referenciamos na rotina o nome da aba, mas quando chegamos na instrução :
If Range("A" & i).Value = Txtnforigem.Text And codigo.Text = Range("C" & i).Value Then, perceba que antes de Range não estamos informado que é referente a aba Resumo, igual foi feito na instrução anterior, desta forma a rotina entende que é referente a aba ativa e por isto não localiza nada.

Resumindo, se a intenção é chamar o formulário e executa-lo de qualquer aba ou de uma aba principal, é só referenciarmos a aba "Resumo" direto na rotina sem ter a necessidade de seleciona-la, então usariamos uma das duas formas, temos outras, mas vou colocar só as duas :

Referenciando o nome direto :

Private Sub CODIGO_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim UltimaLinha, i As Long

UltimaLinha = Sheets("Resumo").Cells(Cells.Rows.Count, 1).End(xlUp).Row

    If UltimaLinha < 6000 Then UltimaLinha = 6000

    For i = 1 To UltimaLinha
        If Sheets("Resumo").Range("A" & i).Value = Txtnforigem.Text And CODIGO.Text = Sheets("Resumo").Range("C" & i).Value Then
        Label12.Caption = Sheets("Resumo").Range("G" & i).Value

    Exit For
        End If
    Next

End Sub

ou, criando uma Variável para a aba e definindo o Tipo e nome.

Private Sub CODIGO_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim UltimaLinha, i As Long
    
'Definimos a aba tipo e nome
Dim sResumo As Worksheet
Set sResumo = Sheets("Resumo")

UltimaLinha = sResumo.Cells(Cells.Rows.Count, 1).End(xlUp).Row
    
    If UltimaLinha < 6000 Then UltimaLinha = 6000
    
        For i = 1 To UltimaLinha
            If sResumo.Range("A" & i).Value = Txtnforigem.Text And CODIGO.Text = sResumo.Range("C" & i).Value Then
            Label12.Caption = sResumo.Range("G" & i).Value
        
        Exit For
            End If
        Next

End Sub

Qualquer uma das rotinas acima pode ser executada sem a necessidade de selecionar a aba Resumo para obter o resultado pretendido.

[]s

 
Postado : 18/08/2015 11:09 am