Userform para entrada de datos

Estoy creando una aplicación para gestionar una pequeña empresa.

Por el momento tengo una duda que consiste en el userform que he creado para dar de alta nuevos clientes.

Quisiera que el formulario me diera el nuevo numero de cliente automáticamente. Este numero de cliente debería ser el mismo número que el cliente anterior +1. Es decir, si el último cliente dado de alta es el "CL0001" la próxima vez que quiera dar de alta un nuevo cliente, el formulario automáticamente me ofrezca el número "CL0002" en el Textbox1 que es el correspondiente al numero de cliente.

Los datos se almacenan en la hoja "CLIENTS" del libro activo.

Respuesta
1

Podés agregar algo así al evento Initialize del Userform:

Private Sub UserForm_Initialize()
Dim clie As String
Dim nroclie As Long
clie = Sheets("CLIENTS").Range("A" & Sheets("CLIENTS").Range("A" & Rows.Count).End(xlUp).Row)
nroclie = Right(clie, 4) + 1
Label1.Caption = "CL" & Format(nroclie, "0000")
End Sub

Lo que hará es buscar en la col A el código del último registro creado y tomar su parte numérica para sumarle 1.

Esto te dará resultado mientras no cambies el orden de la hoja... porque siempre estará tomando el valor del último registro.

Mi sugerencia en casos de códigos alfanuméricos es que guarden en otra col auxiliar solo la parte numérica. Supongamos en col A los nros y en col B el código completo, En ese caso la instrucción para el Label sería:

Private Sub UserForm_Initialize()
'x Elsamatilde
Label1.Caption = "CL" & Format(Application.WorksheetFunction.Max(Sheets("CLIENTS").[A:A]) + 1, "0000")
End Sub

Te invito a descargar la demo de mi manual de Formularios, encontrarás algunos temas desarrollados que quizás puedan servirte de guía.

Sdos.

Elsa

http://aplicaexcel.galeon.com/manual_UF2010.htm 

Hola Elsa,

No acabo de entender dónde debo pegar la subrutina que me indicas. Te mando un link donde puedes descargar el archivo, a ver si funciona:

https://www.dropbox.com/s/xd1h7dmwkvi40bp/BD%202.0.xlsm?dl=0 

En el mismo formulario que estás utilizando. Dejo imagen.

Le hice unos cambios porque veo tu tabla vacía, en ese caso hay que contemplar que el dato debe empezar en 1.

Private Sub UserForm_Initialize()
Dim clie As String
Dim nroclie As Long
'evalua si la tabla aún está vacía
If Sheets("CLIENTS").[A2] = "" Then
    nroclie = 1
Else
    clie = Sheets("CLIENTS").Range("A" & Sheets("CLIENTS").Range("A" & Rows.Count).End(xlUp).Row)
    nroclie = Right(clie, 4) + 1
End If
'Label10.Caption = "CL" & Format(nroclie, "0000")
TextBox1.Value = "CL" & Format(nroclie, "0000")
TextBox2.SetFocus
End Sub

Para este tipo de datos, donde el usuario no los debiera modificar, se utilizan los Label. Por eso te coloqué la línea por ahora inhabilitada del Label10.

Si vas a mantener el textbox utiliza el código tal como te lo envío.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas