Visual Basic para Aplicaciones - vba - excel macro para insertar nuevos datos a una planilla en el lugar correcto

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 10
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

vba - excel macro para insertar nuevos datos a una planilla en el lugar correcto

Publicado por AFB (6 intervenciones) el 11/05/2020 18:25:12
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
' acá les paso el código del ejemplo Y adjunto a este código una workbook de excel, con una sola hoja  de ejemplo en la cual agregar datos al final de la lista, según su formato.
 ' -----------------------------------
 
Dim Celda() As CellFormat
Dim Hoja_n As Workbook
Dim Celda_fin As String
Dim Celda_inicio As String
Dim R As Range
 
Sub Saltar_Celdas_Llenas(Hoja_n, Celda_inicio, Celda_fin)
 
  Application.Workbooks("tabla02").Worksheet(Hoja_n).Select
 
    Set Celda(0) = Celda_inicio
    Set Celda(1) = Celda_fin
 
    Do While Not IsEmpty(ActiveCell)
        ActiveCell.Offset(1, 0).Activate
    Loop
End Sub
 
Sub Ejemplo_33()
 
 
    Dim Nombre As String
    Dim Ciudad As String
    Dim Edad As Integer
    Dim Fecha As Date
    Dim Mas_datos As Integer
    Dim Nuevo_Nombre As String
 
    Call Saltar_Celdas_Llenas(Hoja_n, Celda_inicio, Celda_fin)
 
    ' ----------------
 
 
    Do
 
    Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")
    Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")
    Edad = Val(InputBox("Entre la Edad : ", "Edad"))
    Fecha = CDate(InputBox("Entre la Fecha : ", "Fecha"))
        With ActiveCell
        .Value = Nombre
        .Offset(0, 1).Value = Ciudad
        .Offset(0, 2).Value = Edad
        .Offset(0, 3).Value = Fecha
        End With
 
    ActiveCell.Offset(1, 0).Activate
    Mas_datos = MsgBox("Otro registro ?", vbYesNo + vbQuestion, "Entrada de datos")
    Loop While Mas_datos = vbYes
 
ActiveWorkbook.Save
 
End Sub
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 Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

vba - excel macro para insertar nuevos datos a una planilla en el lugar correcto

Publicado por Antoni Masana (498 intervenciones) el 11/05/2020 19:18:43
No entiendo lo que estas haciendo ni lo que quieres hacer y me niego a especular.

Veamos lo que has escrito paso a paso

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
Sub Ejemplo_33()
    Dim Nombre As String
    Dim Ciudad As String
    Dim Edad As Integer
    Dim Fecha As Date
    Dim Mas_datos As Integer
    Dim Nuevo_Nombre As String
 
    Call Saltar_Celdas_Llenas(Hoja_n, Celda_inicio, Celda_fin)
 
    Do
        Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")
        Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")
        Edad = Val(InputBox("Entre la Edad : ", "Edad"))
        Fecha = CDate(InputBox("Entre la Fecha : ", "Fecha"))
 
        With ActiveCell
            .Value = Nombre
            .Offset(0, 1).Value = Ciudad
            .Offset(0, 2).Value = Edad
            .Offset(0, 3).Value = Fecha
        End With
 
        ActiveCell.Offset(1, 0).Activate
        Mas_datos = MsgBox("Otro registro ?", vbYesNo + vbQuestion, "Entrada de datos")
    Loop While Mas_datos = vbYes
 
    ActiveWorkbook.Save
End Sub

* Llama al proceso Saltar_Celdas_Llenas y le pasas tres variables que estan vacias ¿?
* Solicitas el nombre y pones RETURN PARA TERMINAR ¿Por donde?
* Solicitas la ciudad termino o no
* La edad la fecha dada error si no entran números

Y si dan intro en las cuatro entradas de datos ¿Ingresa una fila en blanco?


SEGUNDO MODULO

1
2
3
4
5
6
7
8
9
10
Sub Saltar_Celdas_Llenas(Hoja_n, Celda_inicio, Celda_fin)
    Application.Workbooks("tabla02").Worksheet(Hoja_n).Select
 
    Set Celda(0) = Celda_inicio
    Set Celda(1) = Celda_fin
 
    Do While Not IsEmpty(ActiveCell)
        ActiveCell.Offset(1, 0).Activate
    Loop
End Sub

* Abro el libro que se llama Tabla2.xlsx.xlsm y en la primera línea hace referencia a Tabla2 ¿Algo falla?
* Hace referencia a la hoja ¿cual? si no se pasa valor a la variable.
* Celda(0 y Celda(1) ¿Que es esto? ¿Para que sirve?
* Y por último el While ¿Cual es la celda activa? Porque no veo que se active ninguna.

Esta todo mal.

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: 10
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

vba - excel macro para insertar nuevos datos a una planilla en el lugar correcto

Publicado por AFB (6 intervenciones) el 11/05/2020 19:47:07
Lo vuelvo a postear más adelante, entiendo todas tus correcciones gracias.
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: 10
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

vba - excel macro para insertar nuevos datos a una planilla en el lugar correcto

Publicado por AFB (6 intervenciones) el 11/05/2020 20:55:32
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
35
36
37
38
39
40
41
42
Sub ins_dtos()
 
Dim Nombre As String
Dim Ciudad As String
Dim Edad As Integer
Dim fecha As Date
' Llamada a la función Saltar_Celdas_Llenas, el programa salta aquí a ejecutar las
'instrucciones de este procedimiento y luego vuelve para continuar la ejecución a partir de la
'instrucción Do
 
 
Call Saltar_Celdad_Llenas
 
Do
 
Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")
Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")
Edad = Val(InputBox("Entre la Edad : ", "Edad"))
fecha = CDate(InputBox("Entra la Fecha : ", "Fecha"))
With ActiveCell
.Value = Nombre
.Offset(0,1)  ´AQUI ME DA UN ERROR DE SINTAXIS
.Value = Ciudad
.Offset(0,2)
.Value = Edad
.Offset(0,3)
.Value = fecha
End With
ActiveCell.Offset(1, 0).Activate
Mas_Datos = MsgBox("Otro registro ?", vbYesNo + vbQuestion, "Entrada de datos")
Loop While Mas_Datos = vbYes
End Sub
 
Sub Saltar_Celdad_Llenas()
 
Worksheets("Hoja1").Activate
ActiveSheet.Range("A1").Activate
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate
Loop
 
End Sub
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: 10
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

vba - excel macro para insertar nuevos datos a una planilla en el lugar correcto

Publicado por AFB (6 intervenciones) el 11/05/2020 21:41:54
La cuestión aquí, luego de corregir el código, es como utilizar el offset, para que se posicione al final de los registros ya ingresados.Teniendo en cuenta que esto se modificará cada vez que ingrese datos a la planilla. Teniendo simpre las mismas columnas donde insertar e incrementandose la fila al respecto.
Hay algo que funcione como un recordset (BOF,EOF) ?

Espero sus respuestas, muchisimas gracias.
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: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

vba - excel macro para insertar nuevos datos a una planilla en el lugar correcto

Publicado por Antoni Masana (498 intervenciones) el 11/05/2020 22:14:42
Revisa 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
Sub Ejemplo_33()
    Dim Nombre As String, Ciudad As String, Edad As Integer, Fila As Long, _
        Fecha As Date, Mas_datos As Integer, Nuevo_Nombre As String
    Fila = 1
    Do
        Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")
        If Nombre = "" Then Exit Sub
 
        Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")
        Edad = Val(InputBox("Entre la Edad : ", "Edad"))
        Fecha = CDate(InputBox("Entre la Fecha : ", "Fecha"))
 
        While Cells(Fila, "A") <> ""
            Fila = Fila + 1
        Wend
        Cells(Fila, "A") = Nombre
        Cells(Fila, "B") = Ciudad
        Cells(Fila, "C") = Edad
        Cells(Fila, "D") = Fecha
 
        Mas_datos = MsgBox("Otro registro ?", vbYesNo + vbQuestion, "Entrada de datos")
    Loop While Mas_datos = vbYes
    ActiveWorkbook.Save
End Sub

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: 10
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

vba - excel macro para insertar nuevos datos a una planilla en el lugar correcto

Publicado por AFB (6 intervenciones) el 11/05/2020 22:35:35
Gracias, tu ejemplo, con tus correciones obvio funcionó.
ahora tendró que seguir leyendo para ver el funcionamiento de Offset en otros ejemplos.
Saludos, quedamos al habla. Gracias.
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