Excel - Copiar los datos en la siguiente fila vacia

 
Vista:
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Copiar los datos en la siguiente fila vacia

Publicado por Rebeca (8 intervenciones) el 28/01/2019 15:47:48
Buenas tardes:
Estoy trabajando en un formulario para ingresar datos sobre unos productos. Es por esto que necesito que rellene la hoja de excel por filas, sin sobreescribir la anterior. Tengo este código:

1
2
3
4
5
Dim FILA As Integer
    FILA = 3
 While Cells(FILA, 1) <> ""
            FILA = FILA + 1
        Wend

Definí todos los elementos con "(FILA,columna_del_elemento)", pero cuando guardo los datos me los sobreescribe al cerrar y volver a abrir el formulario.
Cómo lo hago para no modificar tanto el código?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Copiar los datos en la siguiente fila vacia

Publicado por Andres Leonardo (1583 intervenciones) el 28/01/2019 16:46:27
Hola ... una buena idea .. es insertar siempre en la misma... ejemplo la hoja1 filas 2 ... primero insertando una fila

campo1 - campo2
andres - 25

al insertarlo.... se va a ingresar sobre andres y 25 ..pero el truco esta en insertarlo en la 2 pero primero agregando una fila

campo1 - campo2
------fila vacia -----
andres - 25


y luego seria

campo1 - campo2
rebeca -- 22
andres - 25

Espero te ayude el consejo .. asi no determinas celdas vacias ni nada por el estilo :)


que pases bien ...

PD: Luego podrias verificar si lo que vas a insertar ya existe para que actualice el dato y no cree por gusto si es una tabla maestra

SAludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Copiar los datos en la siguiente fila vacia

Publicado por Rebeca (8 intervenciones) el 28/01/2019 16:46:40
Este es el documento en el que estoy trabajando. No logro hacer que la información del formulario quede en la hoja de excel sin borrar lo anterior
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Copiar los datos en la siguiente fila vacia

Publicado por Antoni Masana (2477 intervenciones) el 29/01/2019 08:34:52
Para rellena una hoja de Excel hay dos formas y todo depende de la necesidad y la forma como se desea la información.

Eso quiere decir que se puede rellenar por arriba, como dice Andrés o por abajo.

Ahora vamos por lo que está fallando. Primero una crítica, La fila 2 ¿No resulta exageradamente alta? A mí me ha causado una impresión que no podrá borrar en varios días.

La forma de escribir el código es caótica y cuesta de interpretar o leer

Ahora la parte que te interesa.

Cuando se da al botón guardar lo que se hace es:

1º - Que se hace es validar que se tiene TODOS los datos y no continuar si faltan datos.
2º - Buscar donde se ponen los datos.
3º - Guardarlos.
4º - Limpiar los campos del formulario.

Y no guardarlos y después verificar si están todos. Si faltan datos se sale del SUB sin limpiar los datos ya introducidos.

Si insertas por arriba acostumbran a haber menos problemas pero si lo haces por abajo debes buscar la primera celda vacía de la columna que siempre tenga datos. Si buscas en la columna A y resulta que los datos de esta columna son opcionales no te sirve. Si no hay ninguna columna que SIEMPRE va a tener datos tendrás que mirar en varias a la vez.


Cuando te he dicho que el código es caótico me refiero a que:

* entre el Private Sub y el End Sub todo el contenido tiene que estar desplazado 4 caracteres,
* lo mismo entre el IF y el End If,
* el Do While y el Loop o While y Wend,
* el For y el Next, etc.

Faltan comentarios.


Esto es caótico:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Private Sub cbo_ED_Change()
 
On Error Resume Next
Application.ScreenUpdating = False
cbo_EO.Clear
TABLA_corresp = cbo_ED.List(cbo_ED.ListIndex)
Sheets(TABLA_corresp).Select
Range("d4").Select
    Do While Not IsEmpty(ActiveCell)
        cbo_EO.AddItem ActiveCell
        ActiveCell.Offset(0, 1).Select
    Loop
 
  If cbo_ED.Value = "Calidad" Then
            TXT_L1.Enabled = True
            TXT_L2.Enabled = True
            TXT_CL.Enabled = True
            Label32.Enabled = True
            Label31.Enabled = True
            Label30.Enabled = True
            Frame6.Enabled = True
        Else
            TXT_L1.Enabled = False
            TXT_L2.Enabled = False
            TXT_CL.Enabled = False
            Label32.Enabled = False
            Label31.Enabled = False
            Label30.Enabled = False
            Frame6.Enabled = False
        End If
 
End Sub

Esto se lee un poco mejor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub cbo_ED_Change()
    Dim Valor As Boolean
 
    On Error Resume Next
    Application.ScreenUpdating = False
    cbo_EO.Clear
    TABLA_corresp = cbo_ED.List(cbo_ED.ListIndex)
    Sheets(TABLA_corresp).Select
    Range("d4").Select
 
    Do While Not IsEmpty(ActiveCell)
        cbo_EO.AddItem ActiveCell
        ActiveCell.Offset(0, 1).Select
    Loop
                                     Valor=False
    If cbo_ED.Value = "Calidad" Then Valor=True
 
    TXT_L1.Enabled  = Valor
    TXT_L2.Enabled  = Valor
    TXT_CL.Enabled  = Valor
    Label32.Enabled = Valor
    Label31.Enabled = Valor
    Label30.Enabled = Valor
    Frame6.Enabled  = Valor
End Sub

CUIDADO con el uso y abuso del ON ERROR RESUME NEXT porque te pueden ocultar errores importantes que debes corregir.
Declarar todas la variables, es una buena costumbre y evita muchos errores.


No hagas esto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Private Sub CommandButton1_Click()
 
 
Dim FILA As Integer
FILA = 3
While Cells(FILA, 1) <> ""
            FILA = FILA + 1
        Wend
 
 
'COLOCA LOS VALORES DE LOS CONTROLES EN EL LIBRO
Hoja2.Cells(FILA, 1) = TXT_OF1.Value
Hoja2.Cells(FILA, 2) = TXT_OF2.Value
Hoja2.Cells(FILA, 3) = TXT_OF3.Value
Hoja2.Cells(FILA, 4) = CBO_NO1.Value
Hoja2.Cells(FILA, 5) = TXT_FECHA1.Value
Hoja2.Cells(FILA, 6) = CBO_TURNO1.Value
Hoja2.Cells(FILA, 8) = cbo_ED.Value
Hoja2.Cells(FILA, 7) = cbo_EO.Value
Hoja2.Cells(FILA, 13) = TXT_PESO.Value
Hoja2.Cells(FILA, 14) = TXT_FECHA2.Value
Hoja2.Cells(FILA, 15) = CBO_TURNO2.Value
Hoja2.Cells(FILA, 16) = CBO_ACCION.Value
Hoja2.Cells(FILA, 17) = CBO_OBS.Value
Hoja2.Cells(FILA, 18) = CBO_PROD.Value
Hoja2.Cells(FILA, 11) = CBO_NC1.Value
Hoja2.Cells(FILA, 9) = CBO_NC2.Value
Hoja2.Cells(FILA, 10) = CBO_NC3.Value
Hoja2.Cells(FILA, 12) = CBO_NO2.Value
Hoja2.Cells(FILA, 19) = CBO_CAUSA.Value
Hoja2.Cells(FILA, 20) = TXT_CL.Value
Hoja2.Cells(FILA, 21) = TXT_L1.Value
Hoja2.Cells(FILA, 22) = TXT_L2.Value


Es mejor así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Private Sub CommandButton1_Click()
    Dim FILA As Integer
    FILA = 3
    While Cells(FILA, 1) <> ""
       FILA = FILA + 1
    Wend
 
    ' ---&--- COLOCA LOS VALORES DE LOS CONTROLES EN EL LIBRO
 
    With Sheets("Tarjas")
        .Cells(FILA, 1) = TXT_OF1.Value
        .Cells(FILA, 2) = TXT_OF2.Value
        .Cells(FILA, 3) = TXT_OF3.Value
        .Cells(FILA, 4) = CBO_NO1.Value
        .Cells(FILA, 5) = TXT_FECHA1.Value
        .Cells(FILA, 6) = CBO_TURNO1.Value
        .Cells(FILA, 8) = cbo_ED.Value
        .Cells(FILA, 7) = cbo_EO.Value
        .Cells(FILA, 13) = TXT_PESO.Value
        .Cells(FILA, 14) = TXT_FECHA2.Value
        .Cells(FILA, 15) = CBO_TURNO2.Value
        .Cells(FILA, 16) = CBO_ACCION.Value
        .Cells(FILA, 17) = CBO_OBS.Value
        .Cells(FILA, 18) = CBO_PROD.Value
        .Cells(FILA, 11) = CBO_NC1.Value
        .Cells(FILA, 9) = CBO_NC2.Value
        .Cells(FILA, 10) = CBO_NC3.Value
        .Cells(FILA, 12) = CBO_NO2.Value
        .Cells(FILA, 19) = CBO_CAUSA.Value
        .Cells(FILA, 20) = TXT_CL.Value
        .Cells(FILA, 21) = TXT_L1.Value
        .Cells(FILA, 22) = TXT_L2.Value
    End with

De momento ya tienes bastante dolor de cabeza con lo que te he contado.

Saludos
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Copiar los datos en la siguiente fila vacia

Publicado por Rebeca (8 intervenciones) el 29/01/2019 11:25:58
Muchas gracias por su ayuda. estoy recién iniciando en Macros.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Copiar los datos en la siguiente fila vacia

Publicado por Antoni Masana (2477 intervenciones) el 29/01/2019 12:39:03
He modificado la MACRO del formulario de forma más óptima y que se puede leer mejor, ademas he arreglado el problema de insertar nuevas lineas.

Como buscas en la columna A y ya verificas que siempre tendrá información no hace falta hacer más cosas.

Dale un repaso al código y dime que te parece, si hay algo que no entiendes te lo explicare con mucho gusto.

Veras que la rutina de guardar se ha reducido considerablemente en líneas de código y esas más de 200 líneas con un monton de IF y ELSE se han reducido a 5 dentro de un FOR.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Copiar los datos en la siguiente fila vacia

Publicado por Rebeca (8 intervenciones) el 30/01/2019 15:56:38
Me aparece ese mensaje, qué debería cambiar y/o agregar?
error1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Copiar los datos en la siguiente fila vacia

Publicado por Andres Leonardo (1583 intervenciones) el 30/01/2019 16:31:02
Solo te falta el igual

1
Valor = False
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Copiar los datos en la siguiente fila vacia

Publicado por Rebeca (8 intervenciones) el 30/01/2019 16:36:59
Gracias, lo noté justo después de publicar.
El nuevo problema es que al poner guardar no lo hace
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Copiar los datos en la siguiente fila vacia

Publicado por Antoni Masana (2477 intervenciones) el 30/01/2019 20:17:36
Esta mañana he revisado la macro y he detectado algunos fallos.

Mañana te la envío corregida.

Otra cosa que he visto y no había visto cuan publique mi primer comentario es el porqué de la altura de la fila 2. la cuestión es si de la columna 23 a la 80 son suficientemente anchas.

Otra cosa que he visto al probar la macro es que en el formulario no salta bien de campo a campo, la secuencia es de izquierda a derecha y de arriba a abajo y siga un orden. Yo le estableceré el orden y te diré como se hace.

Otra cosa que he visto y no está bien es un On Error Resume Next Hay otra forma de hacerlo para que no de error.


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Copiar los datos en la siguiente fila vacia

Publicado por Antoni Masana (2477 intervenciones) el 31/01/2019 11:20:04
Revisando el código y corrigiendo los fallos que deje veo varias cosas que no entiendo o no deben estar bien.

Los TextBox se limpian así
1
Txt.COMENT.Text = “”

Los ComboBox se limpian así

En el caso de CBO_NC1 -
1
CBO_NC1.Clear

En el caso CBO_NOMBRE -
1
CBO_NOMBRE.ListIndex = 0

El caso del CBO_ED
1
CBO_ED.ListIndex = -1

He puesto al final del Botón guardar la limpieza de todos los campo del formulario y te he marcado los que no borrabas por si era un descuido.


Algunos consejos más

Se puede hacer que al abrir el libro siempre este en una determinada página independientemente de cómo se cierre.

Una buena Práctica es guardar el libro cada vez que se introducen datos, esto evita cerrar el libro sin guardar y perder la información.

Las hojas: Calidad, Corrugado, Curioni, Dong Fang IV, W11500, W12000 y W15000 creo que son de consulta para los ComboBox el formulario creo que tendrían que estar ocultas. Las he ocultado.

La lista de personas del Primer ComboBox no deben estar en el código, su lugar es una Hoja de nombres y cargar los datos de la hoja.


Un consejo de programador con experiencia,

No he siro de ahorrar en los nombres de variables y si escribir C me serbia igual que Escribir Cantidad ¿Para qué gastar tantas letras? Pues para poder leerlo cuando no te acuerdes de hiciste dentro de seis meses.

Por ejemplo en este código he realizado algunos cambios que mejoran el código pero al leerlo no sé qué significa st,
1
2
3
4
5
                                  st = 0
    If CBO_NC1.ListIndex > 0 Then st = st + 1
    If CBO_NC2.ListIndex > 0 Then st = st + 1
    If CBO_NC3.ListIndex > 0 Then st = st + 1

He cambiado el Application.ScreenUpdating = False y lo he puesto al inicio y un Application.ScreenUpdating= True al cerrar

No entendía como se cargaban Los ComboBox CON_OE, CBO_ED y CBO_NC1/2/3 y después de algunas pruebas ya lo he entendido.
Muy buena la idea.

Solo una pega y es el evento.

1
2
3
4
5
6
Private Sub cbo_ED_Enter()
    cbo_ED.Clear
    For H = 3 To Sheets.Count
        cbo_ED.AddItem Sheets(H).Name
    Next H
End Sub

He puesto que limpie la lista antes de volver a añadir las hojas de nuevo, cada vez que entraba la lista era más grande.

Y seguro que hay alguna cosa más que me olvido de comentar.


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar