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ón Right.
  • 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 .

Related Articles

Responses

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

  1. 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

  2. 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»

  3. 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.

    1. 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»

  4. 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….

  5. 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

  6. 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.

  7. 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.