¿Cómo tener un código alfanumérico en un useform bloqueado y automático?

Estoy trabajando en un formulario para registrar ordenes de compra o producción. Deseo que cada orden que vaya a ser diligenciada y pegada posteriormente en mi hoja de excel, tenga un código alfanumérico como el que se aprecia en la imagen, que el campo esté bloqueado, comenzando con las letras SA yendo desde el número 100 a infinito.

Ya conseguí que lo que se diligencia en el useform sea pegado en mi hoja de excel "registros". Quiero que el código se genere automáticamente teniendo en cuenta el ultimo código que se generó en la hoja de excel, por ejemplo, si el ultimo generado y escrito en mi hoja de excel fue SA101, que éste código sea SA102.

Muchas gracias a cualquier aporte, y espero haberme hecho entender.

1 respuesta

Respuesta
1

Te dejo las instrucciones.

En mi ejemplo utilicé 2 tipos de controles: un label y un textbox (no queda claro qué tipo de control utilizaste).

Se inician con valores en el evento Initialize y se actualiza en el evento Click del Userform. Solo toma las instrucciones que necesitas.

Private Sub UserForm_Initialize()
'valores iniciales en label y textbox
Label1.Caption = "SA101"
TextBox2 = "SA101"
End Sub
Private Sub UserForm_Click()
'al clic se actualizan los 2 controles: label y textbox
nrolabel = Mid(Label1.Caption, 3, Len(Label1.Caption) - 2) + 1
nrotext = Mid(TextBox2, 3, Len(TextBox2) - 2) + 1
'volcar resultado en los controles
Label1.Caption = "SA" & nrolabel
TextBox2 = "SA" & nrotext
End Sub

Sdos y no olvides valorar la respuesta si el tema queda resuelto, sino comenta.

Hola elsa. 

Adjunto la imagen de como lo he hecho. En un principio era un textbox cuyo nombre es código. Creé también un label cuyo nombre es label34, pegue el código reemplazando los datos, pero cuando reproduzco el useform no se genera el número, quizá hay algo que estoy haciendo mal. 

Gracias.

No, no debes colocar los códigos para los 2 tipos de controles. Dejé 2 ejemplos xq no indicaste de qué tipo de control se trataba, por eso 2 instrucciones: para label y para textbox. Solo usá 1 de las 2.

1 - si vas a tener un label, será así (cambiá el nombre Label1 por el tuyo):

Private Sub UserForm_Initialize()
'valores iniciales en label
Label1.Caption = "SA101"
End Sub
Private Sub UserForm_Click()
'al clic se actualiza el label 
nrolabel = Mid(Label1.Caption, 3, Len(Label1.Caption) - 2) + 1
'volcar resultado en el control
Label1.Caption = "SA" & nrolabel
End Sub

2 - si vas a utilizar un Textbox, será así (también ajustá el nombre del control).

Private Sub UserForm_Initialize()
'valores iniciales en textbox
TextBox2 = "SA101"
End Sub
Private Sub UserForm_Click()
'al clic se actualiza el textbox
nrotext = Mid(TextBox2, 3, Len(TextBox2) - 2) + 1
'volcar resultado en el control textbox
TextBox2 = "SA" & nrotext
End Sub

La actualización la dejé en el evento Click del Userform porque tampoco indicaste en qué momento la necesitas.... debes copiar las instrucciones en el evento que corresponda, quizás luego de guardar datos...o antes del End Sub en la subrutina del botón 'Limpiar'.

Sdos!

Hola. 

Este es el código como ha quedado para el textbox de nombre codigo

Private Sub Form_GOP_Initialize()
'valores iniciales en textbox
codigo = "SA101"
End Sub
Private Sub Form_GOP_Click()
'al clic se actualiza el textbox
nrotext = Mid(codigo, 3, Len(codigo) - 2) + 1
'volcar resultado en el control textbox
codigo = "SA" & nrotext
End Sub

Yo quiero que apenas se carga el formulario, el textbox ya tengo las letras SA101 según sea el numero de la orden y que no se pueda modificar. Por eso lo coloque al inicio de todo de mi código, aunque aun no me lo muestra, el campo sigue estando vacío.

Observa en la imagen el nombre del Userform. El evento Initialize no hace mención a su nombre. Para no errarle al declarar el Private Sub..... debes seleccionar el objeto desde el desplegable de color verde.

En este ejemplo se actualiza al clic de un botón de comando ... no al clic del UF, pero como ya lo dije al inicio... decidí en qué evento debe actualizarse. Esto solo es un ejemplo.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas