Excel - COPIAR DATOS ARCHIVO TXT A EXCEL SIN BORRAR DATOS ANTERIORES

 
Vista:
sin imagen de perfil
Val: 21
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

COPIAR DATOS ARCHIVO TXT A EXCEL SIN BORRAR DATOS ANTERIORES

Publicado por Ana (27 intervenciones) el 16/07/2018 11:04:40
Hola,
Y gracias de antemano.
Mi consulta es la siguiente:
Yo tengo un archivo de texto y quiero pasar todos esos datos a un archivo de excel.
Lo que me gustaría hacer es crear una macro... que me pasara automáticamente los datos del archivo de texto al excel nada mas abrir el excel y que ademas no me pisara los datos anteriores, es decir, que si el ultimo dato copiado esta en la celda A58 cuando vuelva abrir el excel empiece a copiar en la celda A59.
Muchas gracias.
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: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

COPIAR DATOS ARCHIVO TXT A EXCEL SIN BORRAR DATOS ANTERIORES

Publicado por Antoni Masana (2477 intervenciones) el 16/07/2018 13:30:35
Buenas Ana,

¿Cuánto sabes de VBA para hacer una macro? si no tienes bastantes conocimientos hacer algo genérico no funcionara y no te servirá.

Si subes un ejemplo de Excel y Texto. Te hago la macro y te cuento como funciona.

¿El fichero de texto tiene siempre el mismo nombre o cambia cada vez?
¿Una vez incorporados los datos que pasa con el fichero de texto?
¿Si se habré una segunda vez el fichero de Excel y se encuentra con el fichero de texto como sabrá si ya lo ha incorporado para ignorarlo?
Si falta el fichero de texto ¿Debe dar un aviso?

No es complicado pero debe tenerse en cuenta una serie de detalles.

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: 21
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

COPIAR DATOS ARCHIVO TXT A EXCEL SIN BORRAR DATOS ANTERIORES

Publicado por Ana (27 intervenciones) el 17/07/2018 10:47:41
Hola Antoni,
Mi nivel es bajo.
El fichero de texto siempre va a tener el mismo nombre.
El fichero de texto contiene datos sobre herramientas que salen de una maquina, con ese fichero lo que se hace es que cada vez que utilizan herramientas en diferentes proyectos cambia, es decir que los datos nuevos pisan a los anteriores. Y yo lo que quiero es que con la macro se pasen los datos a excel sin pisar los anteriores, que vaya acumulando datos.
Respecto a si se abre por segunda vez el archivo de texto, se podría hacer : una vez que se han copiado los datos a excel , borrar el archivo txt. Cuando se vuelva a hacer un cambio de herramientas se generara un nuevo txt con el mismo nombre y en la misma ubicación.
Si no hay fichero se puede poner un aviso: NO HAY DATOS QUE EXPORTAR.
Te adjunto los ficheros para que los eches un vistazo.
En el fichero de excel hay varias pestañas, donde quiero que se pasen los datos es en DATOS.
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: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

COPIAR DATOS ARCHIVO TXT A EXCEL SIN BORRAR DATOS ANTERIORES

Publicado por Antoni Masana (2477 intervenciones) el 17/07/2018 11:51:29
Ana me he quedado a cuadros.

El libro Excel no tiene datos y el fichero Makino_ToolData_a61 es un fichero INI y tiene formato de fichero INI y contenido de fichero INI.

¿Como se lee y es trata esto?
¿O no es el fichero de texto que hay que leer?

Te adelanto un poco de código.

Esto hay que ponerlo en la carpeta ThisWorkbook y se ejecuta al abrir el libro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub Workbook_Open()
    Dim Fichero As String
 
    Fichero = "C:\Directoro\Mi_Fichero.txt"
 
    If Dir(Fichero) = "" Then
       MsgBox "NO HAY DATOS QUE IMPORTAR.", vbInformation, "IMPORTAR DATOS"
    Else
       Call Importar(Fichero)
    End If
End Sub
 
Private Sub Importar(Fichero)
    Dim Reg As String, Fila As Long
 
    Open Fichero For Input As #1
    While Not EOF(1)
        Line Input #1, Reg
 
        ' --- Aqui falta código que importa los datos
    Wend
    Close #1
    Kill Fichero
End Sub

Adjunto ejemplo.

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: 21
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

COPIAR DATOS ARCHIVO TXT A EXCEL SIN BORRAR DATOS ANTERIORES

Publicado por Ana (27 intervenciones) el 17/07/2018 12:34:41
Hola,
Perdona es un fichero ini, un bloc de notas.
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 DATOS ARCHIVO TXT A EXCEL SIN BORRAR DATOS ANTERIORES

Publicado por Antoni Masana (2477 intervenciones) el 17/07/2018 16:06:43
Con los datos que tengo, que son pocos, he ampliado la MACRO.

Faltan algunos pequeños detalles pero básicamente es 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
' </> -------------------------------------------------------------------- </>
' </> ---&---  Se ejecuta al abrir el libro                        ---&--- </>
' </> -------------------------------------------------------------------- </>
 
Private Sub Workbook_Open()
    Dim Fichero As String
 
    Fichero = "C:\Directoro\Mi_Fichero.txt"
 
    If Dir(Fichero) = "" Then
       MsgBox "NO HAY DATOS QUE IMPORTAR.", vbInformation, "IMPORTAR DATOS"
    Else
       Call Importar(Fichero)
    End If
End Sub
 
' </> -------------------------------------------------------------------- </>
' </> ---&---  Procesa el fichero                                  ---&--- </>
' </> -------------------------------------------------------------------- </>
 
Private Sub Importar(Fichero)
    Dim Reg As String, Fila As Long
 
    Sheets("DATOS").Select
 
    Open Fichero For Input As #1
    Fila = 0
    While Not EOF(1)
        Line Input #1, Reg
 
        ' ---&--- Con el primera registro busca la primera fila libre
 
        If Fila = 0 Then
           Fila = 1
           While Cells(Fila, "A") <> ""
               Fila = Suma_Fila(Fila): If Fila = -1 Then Close #1: Exit Sub
           Wend
        End If
 
        ' ---&--- cargo los datos en la hoja
 
        Call Grabar(Fila, Reg)
 
        Fila = Suma_Fila(Fila)
        If Fila = -1 Then Close #1: Exit Sub
    Wend
    Close #1
    Kill Fichero
End Sub
 
' </> -------------------------------------------------------------------- </>
' </> ---&---  Funcion para sumar 1 y controlar la hoja llena      ---&--- </>
' </> -------------------------------------------------------------------- </>
 
Private Function Suma_Fila(Fila As Long)
    Fila = Fila + 1
    If Fila > 2 ^ 20 Then
       MsgBox "Superada la capacidad de la hoja", vbCritical, "HOJA LLENA"
       Suma_Fila = -1
    Else
       Suma_Fila = Fila
    End If
End Function
 
' </> -------------------------------------------------------------------- </>
' </> ---&---  Procesa el fichero                                  ---&--- </>
' </> -------------------------------------------------------------------- </>
 
Private Sub Grabar(Fila As Long, Reg As String)
        ' --- Aqui falta codigo
End Sub
 
' </> -------------------------------------------------------------------- </>
' </> ---&---                                                      ---&--- </>
' </> ---&---  FIN  DE  LA  MACRO                                  ---&--- </>
' </> ---&---                                                      ---&--- </>
' </> -------------------------------------------------------------------- </>

En la línea 8 se ha de poner el fichero de texto a leer.

En la línea 24 la hoja de Excel en la que se guardan los datos

Se parte de la suposición que siempre se rellena la columna A si no es así cambiar la letra de la línea 35.

En la línea 70 falta todo el código para asignar el registra a las celdas.

Para el código de la 70 supongamos que el registro tiene 20 posiciones 3 para la columna A, 7 para la B y 10 para la C

El código seria este:

1
2
3
4
5
Private Sub Grabar(Fila As Long, Reg As String)
    Cells(Fila, 1) = mid$(Reg, 1, 3)            ' Columna A
    Cells(Fila, 2) = mid$(Reg, 4, 7)            ' Columna B
    Cells(Fila, 3) = mid$(Reg,11,10)            ' Columna C
End Sub

El código esta sin probar y puede tener fallos. He puesto un control para que cuando la hoja este llena no de error, sale un aviso, se cancela y no borra el fichero de texto. Como no se si se puede llenar lo pongo por si acaso y como no se que hacer si se llena no lo pongo.
En un libro que manejo en el trabajo tenia este problema y la macro crea una segunda hoja y la llama, en tu caso seria "DATOS-2" con cabecera y formato y sigue llenado la segunda hoja.

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: 21
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

COPIAR DATOS ARCHIVO TXT A EXCEL SIN BORRAR DATOS ANTERIORES

Publicado por Ana (27 intervenciones) el 20/07/2018 09:53:52
Hola Antoni,
Muchas gracias.
Tengo que ir probando la poco a poco porque me da algún fallo.
Espero que la próxima semana lo tenga hecho.
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