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
TioTech quiero hacer una consulta con respecto al botón guardar, si bien al dejarlo que descargue la información del Form en la primera fila fe la tabla dinámica funciona bien, pero al intentar que lo haga en la última fila + 1 me arroja error, puedes ayudarme a resolver como se debe hacer para que grabe en la última fila + 1 de la tabla, de ante manos gracias
Hola Miguel.
Siguen siendo una gran ayuda y aprendizaje tus vídeos y las explicaciones que haces en ellos. Muchas gracias.
Yo tengo algo un poco más complicado sobre este tema.
1. El formulario lo desarrollé para llenar una hoja de datos diversos que no es la base de datos (BD), es una hoja con un formato especial para una orden.
2. La BD es para registrar de manera consecutiva, las órdenes que se emiten.
3. La intención es que el formulario obtenga el folio según el consecutivo de la BD en un campo en él, para que luego sea ingresado en la hoja de datos.
En tu ejercicio, todo se hace en la misma hoja y en el mío se involucra a una hoja diferente a la que en que se encuentra el formulario para obtener el folio , por lo que requiero saber como direccionarlo.
Como elemento adicional, en el número de folio, quiero que se indique a que año pertenece: «Cli-2024_000001»
Buenas tardes, magnífica colección de vídeos didácticos, le felicito. Deseo aprovechar para preguntarle cómo podría programarse la inserción de la nueva línea debajo de la ya insertada, de forma que los nuevos registros se dispongan en sentido descendente en la tabla. Muchas gracias.
Hola Luis, lo voy a responder en un video pero igual te dejo el código.
ultima_fila= ActiveSheet.Cells(Rows.Count, «B»).End(xlUp).Row
Range(«B» & ultima_fila).Value = «Aquí pones lo que quieres»
BUENOS DIAS, AL MOMENTO DE REGISTRAR LOS DATOS ME ENVIA EL SIGUIENTE ERROR: NO COINCIDEN LOS TIPOS ERROR 13.. AL DEPURAR ME MARCA CON AMARILLO EN : Private Sub FECHA_Change()
Dim EDAD1 As Integer
EDAD1 = getEdad(Me.FECHA.Value) — AQUI MARCA CON AMARILLO
Me.EDAD.Value = EDAD1
End Sub
KE SERA POR FAVOR….
SALUDOS TIO EXCELENTE TUTORIAL. AHORA COMO HACER PARA QUE AL COLOCAR LOS DATOS BIEN SEA LO HAGA EN MAYUSCULA O MINUSCULA SE REFLEJEN EN EL FORMULARIO TODO EN MAYUSCULA
HOLA TECH
AL EJECUTAR EL CODIGO CLIENTE NO AUMENTA EL SERIAL
ME AYUDAS PORFA
Hola Buenas, me sale el siguiente error «Error en el método Insert de la clase Range»
Buena tarde, me sale el error 380 en tiempo de ejecución «No se puede configurar la propiedad List. Valor de propiedad no valido». Estoy pegado ahí y no he podido avanzar en el video «Botón Buscar datos para Formularios VBA en Excel 🔎 (Múltiple Criterio)» cuando quiero traer del excel la información de la tabla al formulario de Buscar en el cuadro te texto donde de pueden ver los datos.
HOLA BUENOS DIAS AL LLAMAR AL Generar_Codigo me vota error en
Call Genera_Codigo
Me.CODIGO.Value = Codigo_Cliente
Me podria ayudar dandome una recomendacion a que se deberia.