Programando el Botón Registrar y Generando Código (Cli_0001)
Aprende a Programar el Botón Registrar para guardar datos de un formulario y guardarla en una hoja de Excel, validando campos requeridos y generando un nuevo código de cliente basado en el mayor código existente en la columna, incrementado en uno en el formato «Cli_00001».
Generando Código (Cli_0001)
Public Codigo_Cliente
'Generador de Código
Sub Genera_Codigo()
'50 mil es el tamaño de fila del array
Dim miArray(50000) As Long
Dim Numero As Long
i = 5
Do While Cells(i, "B") <> ""
'Extraemos el número
Dato = Cells(i, "B")
Posicion = InStr(Dato, "_")
der = Len(Dato) - Posicion
Numero = Right(Dato, der)
miArray(i) = Numero
i = i + 1
Loop
'Busca al número mas grande del array
Maximo = WorksheetFunction.Max(miArray) + 1
'MsgBox El número 5 indica los ceros y que no se va pasar de 5 dígitos
Codigo_Cliente = "Cli_" & String(5 - Len(Maximo), "0") & Maximo
MsgBox Codigo_Cliente
End Sub
Explicación detallada del código.
Este código busca el número más alto entre los códigos existentes, lo incrementa en uno y genera un nuevo código de cliente en el formato «Cli_00001».
Declaración de Variable Publica
Public Codigo_Cliente
Esta línea declara una variable pública llamada Codigo_Cliente
, que se usará para almacenar el nuevo código generado.
Genera_Codigo
Sub Genera_Codigo()
Esta es la definición de la subrutina Genera_Codigo
, la cual contiene el código que realiza la generación del nuevo código de cliente.
Declaración de Variables Locales
Dim miArray(50000) As Long
Dim Numero As Long
Se declara un array miArray
con un tamaño de 50,000 elementos y una variable Numero
de tipo Long
.
Inicialización de Variables
i = 5
Se inicializa la variable i
en 5, indicando que el proceso de búsqueda de códigos comenzará en la fila 5.
Bucle para Extraer Números de Códigos Existentes
Do While Cells(i, "B") <> ""
'Extraemos el número
Dato = Cells(i, "B")
Posicion = InStr(Dato, "_")
der = Len(Dato) - Posicion
Numero = Right(Dato, der)
miArray(i) = Numero
i = i + 1
Loop
Este bucle recorre las celdas de la columna B desde la fila 5 en adelante, hasta encontrar una celda vacía. Dentro del bucle:
Dato
obtiene el valor de la celda actual.Posicion
encuentra la posición del carácter «_».der
calcula la longitud del número después del carácter «_».Numero
extrae el número usando la funciónRight
.- Este número se almacena en el array
miArray
en la posición correspondiente. - Incrementa
i
para moverse a la siguiente fila.
Buscar el Número Máximo en el Array
Maximo = WorksheetFunction.Max(miArray) + 1
Utiliza la función Max
de WorksheetFunction
para encontrar el número más alto en miArray
y le suma 1.
Generar el Nuevo Código de Cliente
Codigo_Cliente = "Cli_" & String(5 - Len(Maximo), "0") & Maximo
Esta línea genera el nuevo código de cliente concatenando:
- El prefijo «Cli_».
- Una serie de ceros para asegurarse de que el número tenga siempre 5 dígitos.
- El número máximo incrementado.
Mostrar el Nuevo Código
MsgBox Codigo_Cliente
Muestra el nuevo código de cliente en un cuadro de mensaje.
Creación de un formulario con botones: Registrar, Modificar, Eliminar, Limpiar y Buscar .
- Video 01. Diseño de Formulario
- Video 02. Validar Email, Números y Textos
- Video 03. Validar y cambios de color Campos Vacíos.
- Vide4. Insertar Calendario Flotante y Calcular Edad
- Video 5. Duplicar Calendario y programar botón Examinar.
- Video 7. Programando el botón Búsqueda Múltiple.
- Video 08. Programando el botón Eliminar en VBA
Buenas noches Doctor Tio Tech, tengo una duda al programar el botón registrar, el cual tome la opción de cerrar el formulario, sin embargo al volver a generar un nuevo registro me aparece el error » «13» en tiempo de ejecución:
No coinciden los tipos
Señalándome la fila del código
Numero = Right(Dato, der)
Agradezco de antemano sus tutoriales e información compartida, y estoy pendiente de la aclaración. Muchas gracias por toda la información
Buenas Tardes el tio tech , al momento de darle al boton registrar luego de llenar todos los campos me sale un error «438» en tiempo de ejecución: dice el objeto no admite esta propiedad o método , que atenta a su respuesta saludos
Si tengo 2 códigos diferentes con los que quiero ingresar, ¿Cómo se haría la programación? Para que no me vaya a duplicar
Ej: Cli_00001
Emp_00001