Formularios, eventos, registros y operaciones

Formulario: Abrir con registro nuevo:

Private Sub Form_Open(Cancel As Integer)
    DoCmd.GoToRecord , , acNewRec
End Sub

Registros: Buscar el último registro relacionado a un id. DLast()

Private Sub id_producto_AfterUpdate()
    saldo_antes = DLast("[saldofinal]", "BodegaPrincipal", "BodegaPrincipal.[id_producto] = " & id_producto)
End Sub

Operaciones: Validar un retiro cuando hay saldo/existencia

Private Sub Retiro_AfterUpdate()
    If existencias < retiro Then
        retiro = 0
    End If
    saldofinal = saldoanterior - retiro
End Sub

Evento: Ejecutar consulta con click en botón

Private Sub Bt_anexar_Click()
    If anexado = False Then
        Me.Refresh
        DoCmd.OpenQuery "c_anexaordenretiro2", , acReadOnly
        anexado = True
        Me.Refresh
    End If
End Sub

Funciones y procedimientos

Function saldoactualiza()
    saldoactualiza = saldo_antes + ingreso - retiro
End Function

Private Sub id_producto_AfterUpdate()
    saldo_antes = DLast("[saldo_final]", "Inventario", "Inventario.[id_producto] =" & Id_producto)
    saldo_final = saldoactualiza()
End Sub


Private Sub ingreso_AfterUpdate()
    saldo_final = saldoactualiza()
End Sub

Private Sub retiro_AfterUpdate()
    saldo_final = saldoactualiza()
End Sub

Palabras reservadas en Access VBA

no se usan como nombre de campo, casilla de texto, etc:

valor
value

https://learn.microsoft.com/es-es/office/troubleshoot/access/reserved-words