Folio consecutivo

Buenas tardes!
Tengo un formulario donde hay un textbox que con el evento "Enter", mediante una macro, me genera un folio consecutivo. En otro textbox tengo una macro que si se cumple una condición envía un mensaje y la detiene y borra todo lo contenido en los textbox. Lo que quiero es que el numero de folio también se detenga y no, al abrir de nuevo el formulario, me de el siguiente numero que tenia cuando me envío el mensaje.Por ejemplo:
Ultimo folio utilizado 15
Se abre el formulario y genera el folio 16 pero envía el mensaje y detiene la instrucción.
Se capturan los datos correctos y genera el folio 17. Es esto lo que no quiero sino que vuelva a generar el folio 16 dado que el 16 realmente no se utilizo.
Gracias por su ayuda.
Anexo las macros.
Esta es la macro donde envía el mensaje si se da la condición
Private Sub CANTIDAD_AfterUpdate()
Dim saldo As Double
On Error Resume Next
Application.ScreenUpdating = False
DBLCOD = Me.COD
Sheets(DBLCOD).Select
saldo = Range("L" & Rows.Count).End(xlUp).Value
If saldo < Me.CANTIDAD.Value Then
MsgBox "USTED ESTA TRATANDO DE INTRODUCIR UNA CANTIDAD MAYOR AL SALDO ACTUAL" & Chr(13) & "SALDO ACTUAL UNIDADES " & Chr(58) & saldo, vbOKOnly + vbInformation, "**CHECAR"
Me.COD.Value = ""
Me.DES.Value = ""
Me.REFER.Value = ""
Me.CLIENT.Value = ""
Me.PROYE.Value = ""
Me.CANTIDAD.Value = ""
Me.COD.SetFocus
Exit Sub
End If
Sheets("MENU").Select
Application.ScreenUpdating = True
End Sub
Y esta es donde genera el folio.
Private Sub REFER_Enter()
Application.ScreenUpdating = False
Sheets("Catalogo Producto").Select
folio = Range("A65536") + 1
Me.REFER.Value = folio
 Range("A65536") = Me.REFER.Value
 Sheets("MENU").Select
Application.ScreenUpdating = True
End Sub
Saludos
Respuesta
1
Como ya estás incrementando la celda del contador al momento del Enter, luego tenés que borrar 1 al momento del error.
Además así como lo veo se te ejecuta 2 veces la rutina de CANTIDAD, porque al limpiarla también se ejecuta, por eso le agregué la condición de que si envías "" no se ejecute.
Pruébala y comentame si quedó bien. Sino comentame cómo es el orden de cada control:
Private Sub CANTIDAD_AfterUpdate()
If CANTIDAD = "" Then Exit Sub
Dim saldo As Double
On Error Resume Next
Application.ScreenUpdating = False
DBLCOD = Me.COD
Sheets("MENU").Select
saldo = Range("L" & Rows.Count).End(xlUp).Value
If saldo < Me.CANTIDAD.Value Then
MsgBox "USTED ESTA TRATANDO DE INTRODUCIR UNA CANTIDAD MAYOR AL SALDO ACTUAL" & Chr(13) & "SALDO ACTUAL UNIDADES " & Chr(58) & saldo, vbOKOnly + vbInformation, "**CHECAR"
Me.COD.Value = ""
Me.DES.Value = ""
Me.REFER.Value = ""
Sheets("Catalogo").Range("A65536") = Sheets("Catalogo").Range("A65536") - 1
Me.CLIENT.Value = ""
Me.PROYE.Value = ""
Me.CANTIDAD.Value = ""
Me.COD.SetFocus
Exit Sub
End If
Sheets("MENU").Select
Application.ScreenUpdating = True
End Sub
Atención que abrevié el nbre de la hoja, reemplázala por la tuya.
Sdos
Elsa
PD) Mi mejor recomendación: manual de formularios
http://aplicaexcel.galeon.com/manuales.htm
Hola Elsa!
Funciona perfectamente bien cuando sale el mensaje pero en el caso de que se capture información en todos los textbox y por equis razón no se quiere continuar, entonces al dar click en el botón de "Salir" del formulario adiciona otro folio lo cual, también, es incorrecto. Existe otro botón de "Cancelar" que borra todos los texbox pero a este le agregue la instrucción de restar uno y si funciono.
Si esto es motivo de otra pregunta por favor házmelo saber.
Gracias y saludos.
Escribime la rutina del botón SALIR...
Hola Elsa!
La siguiente es la rutina que tengo para el botón "Salir"
Private Sub SALIR_Click()
Application.ScreenUpdating = False
Sheets("MENU").Select
Unload SALIDA
Application.ScreenUpdating = True
End Sub
Gracias
Bien, entonces es porque lo primero que se ejecuta es el Enter de REFER.
Para identificar si la salida es por un proceso natural o una cancelación anticipada, necesitarás una variable para evaluar.
Los pasos serían estos:
Declarar al inicio del módulo: Public estado as byTE
En la rutina del REFER_Enter agregar: estado =1
En la rutina de CANTIDAD_After..., a continuación de restar 1, agregar: estado = 0
En la rutina, luego de capturar todo y terminar el proceso para esa carga nuevamente: estado = 0
En la rutina SALIR, si todavía está en 1 significa que no se completó el proceso:
Private Sub SALIR_Click()
Application.ScreenUpdating = False
if estado = 1 then Sheets("Catalogo").Range("A65536") = Sheets("Catalogo").Range("A65536") - 1
Sheets("MENU").Select
Unload SALIDA
Application.ScreenUpdating = True
End Sub
Otra solución es evaluar si ese valor no se debiera colocar al momento de aceptar el proceso y así te evitas todos estos agregados.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas