Cargar datos en una tabla contenida en una hoja de excel mediante un botón.

Tengo un detalle con una carga de datos, los cuales se toman desde una formulario. Al dar click en el botón guardar, los mismos deberían comenzar a cargarse en la fila 2 de la tabla contenida en la hoja, pero resulta que comienzan a cargarse a partir de la fila 3 dejando una fila vacía de la tabla, inclusive probando el código varias veces se insertan estos datos en la fila 3 pero sin mantener el formato de tabla es muy curioso y la verdad no se cual es el error que tengo. Les adjunto el código y gracias de antemano

Option Explicit
Dim uf As Integer
Dim m As Worksheet
Private Sub GUARDAR_MES_Click()
    'MESEROS.Select
    Set m = Sheets("MESEROS")
    uf = m.Range("A" & Rows.Count).End(xlUp).Row + 1
'***Validaciones de campos vacios e ingreso de datos erroneos****************
        If CEDULA = Empty Then
        MsgBox ("Ingrese la cedula o numero de pasaporte"), vbCritical, "Advertencia"
        CEDULA.BackColor = &HFF&
        CEDULA.SetFocus
        ElseIf NOMBRE = Empty Then
        MsgBox ("Ingrese un nombre"), vbCritical, "Advertencia"
        NOMBRE.BackColor = &HFF&
        NOMBRE.SetFocus
        ElseIf DIRECCION = Empty Then
        MsgBox ("Ingresa la dirección del mesero"), vbCritical, "Advertencia"
        DIRECCION.BackColor = &HFF&
        DIRECCION.SetFocus
        Else
      '***Carga de registro en la base de datos**************************
            m.Cells(uf, "A") = Val(CEDULA)
            CEDULA.BackColor = &HFFFFFF
            m.Cells(uf, "B").Value = NOMBRE
            NOMBRE.BackColor = &HFFFFFF
            m.Cells(uf, "C").Value = DIRECCION
            DIRECCION.BackColor = &HFFFFFF
        CEDULA = Empty
        NOMBRE = Empty
        DIRECCION = Empty
         Exit Sub
        End If        
End Sub
Respuesta
1

[Hola

Lo que pasa es que en las tablas se insertan los datos de modo distinto, mira estas modificaciones:

Option Explicit
Dim uf As Integer
Dim m As Worksheet
Private Sub GUARDAR_MES_Click()
Set m = Sheets("MESEROS")
uf = m.ListObjects(1).ListRows.Count
'***Validaciones de campos vacios e ingreso de datos erroneos****************
If CEDULA = Empty Then
    MsgBox ("Ingrese la cedula o numero de pasaporte"), vbCritical, "Advertencia"
    CEDULA.BackColor = &HFF&
    CEDULA.SetFocus
ElseIf NOMBRE = Empty Then
    MsgBox ("Ingrese un nombre"), vbCritical, "Advertencia"
    NOMBRE.BackColor = &HFF&
    NOMBRE.SetFocus
ElseIf DIRECCION = Empty Then
    MsgBox ("Ingresa la dirección del mesero"), vbCritical, "Advertencia"
    DIRECCION.BackColor = &HFF&
    DIRECCION.SetFocus
Else
'***Carga de registro en la base de datos**************************
    m.ListObjects(1).ListColumns(1).Range(uf + 2) = Val(CEDULA)
    CEDULA.BackColor = &HFFFFFF
    m.ListObjects(1).ListColumns(2).Range(uf + 2) = NOMBRE
    NOMBRE.BackColor = &HFFFFFF
    m.ListObjects(1).ListColumns(3).Range(uf + 2) = DIRECCION
    DIRECCION.BackColor = &HFFFFFF
    CEDULA = Empty
    NOMBRE = Empty
    DIRECCION = Empty
End If
End Sub

Prueba y comentas.

Abraham Valencia

¡Gracias!  Funcionó a la perfección amigo Abraham, ya aprendí algo nuevo!!  

Dios te bendiga...

Hola Abraham...

Agradecido por tu ayuda con esta pregunta, pero quisiera complementarla. En la misma hoja tengo contenida DOS TABLAS una fija y la otra si va creciendo a medida que cargo datos en ella, como cambiaría el código para referir los datos tomados del formulario en dicha tabla?

Saludos. 

[Hola

Hay dos formas de trabajar, a través de VBA, con las tablas de Excel: Su nombre o su número de índice. En el ejemplo usado yo asumí que el índice era 1, por eso pongo ListObjects(1), quizá la otra tabla es simplemente 2. Prueba y comentas.

Abraham Valencia

¡Gracias! 

fabuloso amigo Abraham funciono de maravilla con el indice!!! pero intente con el nombre y no funciono. 

Amigo Abraham Valencia, reciba un cordial saludo. 

Hasta ahora de maravilla me ha funcionado a la perfección tus indicaciones y le he agregado otras cosas para practicar pero lo que no he podido lograr es cargar los datos en la tabla no en la ultima fila de la misma sino en la primera para que los mismos queden ordenados de manera descendente, no se si me se explicar, de antemano gracias por la ayuda que me puedas brindar. 

Mi sincera recomendación es que no te compliques así, mejor sigue insertando todo como está ahora y luego ordenas con la herramienta específica de Excel. Si quieres ordenar con macros, basta activar la grabadora de macros, ordenar, y te dará el código que necesitas.

Abraham Valencia

1 respuesta más de otro experto

Respuesta
1

Jesús en la siguiente fila si modificas con eso empezaría en la fila correcta

uf = m.Range("A" & Rows.Count).End(xlUp).Row + 1
uf = m.Range("A" & Rows.Count).End(xlUp).Row

Gracias amigo Víctor tienes razón cuando sólo cargo un dato en una fila y ya, pero al seguir cargando datos se sobrescribe en.la misma fila y no en la siguiente.

Pase tu código a un archivo y si hace correctamente, te mando el archivo de mi prueba en el siguiente enlace

https://drive.google.com/open?id=16sDF97mFkKCmxiU-qXYa_oN4pr_icxrX 

¡Gracias!  Como te mencione funciona pero yo inserto los datos en una tabla contenida en una hoja de excel... De igual forma valoro tu intención de ayudarme.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas