Olá Fabio, boa noite, com pedido de licença ao Amigão Beto vou dar um pitaco aqui.
No evento Antes de Atualizar de seu campo Quantidade insira o código abaixo:
Private Sub Quantidade_BeforeUpdate(Cancel As Integer)
Dim QtdEst As Integer ' Variável para armazenar a quantidade em estoque da mercadoria
' Aqui carrego a variável com a quantidade no estoque, veja que filtro utilizando o codigo do peoduto
QtdEst = DLookup("Quantidade", "tblEstoque", "Produto =" & Me.Produto & "")
' Aqui verifico se o estoque está zerado para o produto
If QtdEst = 0 Then
MsgBox "Produto.... zerado no estoque !!!"
Exit Sub
End If
' Aqui verifico se a quantidade que vai ser baixada existe no estoque, se for maior emite mensagem
If QtdEst < Str(Me.Quantidade) Then
MsgBox "Estoque atual menor que a quantidade solicitada !!! " & Chr(10) & Chr(10) & "Estoque atual para " & Me.Produto.Column(1) & " é igual a " & QtdEst, vbInformation, " Atenção"
Me.Quantidade.Undo
Cancel = True
DoCmd.SetWarnings False
DoCmd.RunSQL "update tblestoque set Quantidade=Quantidade-Forms![frmPedidos]![frmDetalhesPedido].Form![Quantidade]" _
& " where tblestoque.Produto=Forms![frmPedidos]![frmDetalhesPedido].form![Produto]"
Me.Subtotal = Me.PUnit * Me.Quantidade
DoCmd.SetWarnings True
Else
'Caso a quantidade do produto exista no estoque faz a atualização do campo na tabela estoque
DoCmd.SetWarnings False
DoCmd.RunSQL "update tblestoque set Quantidade=Quantidade-Forms![frmPedidos]![frmDetalhesPedido].Form![Quantidade]" _
& " where tblestoque.Produto=Forms![frmPedidos]![frmDetalhesPedido].form![Produto]"
Me.Subtotal = Me.PUnit * Me.Quantidade
DoCmd.SetWarnings True
End If
End Sub
Observe que se tudo estiver OK o próprio código pega o Preço Unitário e multiplica pela Quantidade e devolve o valor no campo Subtotal.
Abraços, WSenna