Error al Ingresar nuevos clientes

Tengo una planilla de excel, la cual a través de un userform ingreso información sobre clientes, es decir al tener un cliente nuevo, ingreso sus datos en una planilla y le genero un código de cliente. El problema es que solo la planilla me almacena 7 filas, si ingreso 8 clientes me borra uno y así, revisando mi código no he podido encontrar el error y la verdad no se qué hacer.

Private Sub ComboBox1_Change()
        Set h = Sheets("CLIENTES")
End Sub
Private Sub registrar_Click()
    Dim fila As Long
    Dim duplicados As Boolean
    'Obtener la fila disponible
    fila = Application.WorksheetFunction.CountA(Range("B:B")) + 1
    duplicados = False
    'Validar si se han ingresado datos duplicados
    For i = 1 To fila
        If Cells(i, 2).Value = form_clientes.TextBox_nombre.Value Then
        If Cells(i, 10).Value = form_clientes.TextBox_rut.Value Then
                    'Se encontraron datos duplicados
                    MsgBox "Este Cliente ya ha sido ingresado"
                    duplicados = True
        End If
        End If
    Next i
    If Not duplicados Then
       Selection.EntireRow.Insert
       'Insertar datos capturados
       Cells(fila, 2).Value = form_clientes.TextBox_nombre.Value
       Cells(fila, 3).Value = form_clientes.TextBox_empresa.Value
       Cells(fila, 5).Value = form_clientes.TextBox_direccion.Value
       Cells(fila, 6).Value = form_clientes.TextBox_telefono.Value
       Cells(fila, 8).Value = form_clientes.TextBox_ciudad.Value
       Cells(fila, 9).Value = form_clientes.TextBox_correo.Value
       Cells(fila, 10).Value = form_clientes.TextBox_rut.Value
       'categoria
       Cells(fila, 7).Value = form_clientes.categoria.Value
       Cells(fila, "K").Value = Now
       'Codigo cliente
        Dim cod As Integer
        cod = WorksheetFunction.Max(Range("D:D")) + 1
        Cells(fila, 4).Value = cod
       'Notificar al usuario
       MsgBox "Se ha ingresado el Cliente número:" & cod
    End If
End Sub
Private Sub CommandButton2_Click()
 End
End Sub
Private Sub UserForm_Initialize()
    categoría.AddItem "1"
    categoria.AddItem "2"
    categoria.AddItem "3"
End Sub

Este es mi código y este es mi userform

3 Respuestas

Respuesta
1
Respuesta
2

H o l a:

Con esta instrucción estás insertando una fila:

Selection. EntireRow.Insert

Y luego estás escribiendo el nuevo registro en según lo que tienes en tu variable fila

Cells(fila, 2).Value = form_clientes.TextBox_nombre.Value

Tienes que quitar esta línea:

Selection.EntireRow.Insert

Otras recomendaciones en tu macro:

- No es necesario que en cada control hagas referencia al formulario: form_clientes, es necesario solamente si lo invocas desde otro formulario o desde otro módulo.

- Tampoco es necesario que en cada control o en cada celda pogas .value, la propiedad por default de las celdas y de lo controles es .value

- Debes validar que capturen el nombre, de esa forma en la columna B siempre tendrás datos y de esa forma puedes encontrar la última fila y no tendrás datos en blanco.

Private Sub registrar_Click()
'Act.Por.Dante Amor
    Dim fila As Long
    Dim cod As Long
    If TextBox_nombre = "" Then
        MsgBox "Debes poner el nombre", vbExclamation, "REGISTRAR"
        TextBox_nombre.SetFocus
        Exit Sub
    End If
    'Obtener la fila disponible
    fila = Range("B" & Rows.Count).End(xlUp).Row + 1
    'Validar si se han ingresado datos duplicados
    For i = 1 To fila
        If Cells(i, 2) = TextBox_nombre And Cells(i, 10) = TextBox_rut Then
            MsgBox "Este Cliente ya ha sido ingresado"
            Exit Sub
        End If
    Next
    'Insertar datos capturados
    cod = WorksheetFunction.Max(Range("D:D")) + 1
    Cells(fila, 2) = TextBox_nombre
    Cells(fila, 3) = TextBox_empresa
    Cells(fila, 4) = cod
    Cells(fila, 5) = TextBox_direccion
    Cells(fila, 6) = TextBox_telefono
    Cells(fila, 7) = categoria              'categoria
    Cells(fila, 8) = TextBox_ciudad
    Cells(fila, 9) = TextBox_correo
    Cells(fila, 10) = TextBox_rut
    Cells(fila, 11) = Now
    'Notificar al usuario
    MsgBox "Se ha ingresado el Cliente número:" & cod
End Sub

Respuesta
1

No se ve nada extraño en tu código. Lo que te recomiendo es que ejecutes la macro "paso a paso" y veas cual es el valor de la variable "fila" (si no sabes como hacerlo, simplemente te paras en donde estás asignando esa variable y presionas <F9> para que la ejecución se detenga en esa instrucción, a partir de ahí continúa la ejecución mediante <F8>)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas