Realmente espero poder obtener tu ayuda. He estado buscando por todas partes lo que probablemente sea una solución simple.

Tenemos cientos de archivos txt relacionados con programas cnc. Desafortunadamente, ha habido una falta histórica de control para mantener un sistema de numeración estricto para las partes y las operaciones.

Tengo que extraer la tercera y cuarta línea de txt de cada archivo en un documento de Excel para que podamos remunerar algunos y catalogar todos para referenciar.

Hasta ahora, lo más parecido que he encontrado a lo que busco está en el hilo

Extraiga una sola línea de datos de numerosos archivos de texto e impórtelo a Excel

Sin embargo, no puedo hacer que funcione: mi conocimiento de Excel es bueno, pero no con macros. el inicio de cada archivo txt es

#1 <blank line>
#2 %
#3 O00000 (part description)
#4 (part descriptio)
#5 rest of program.

. . . según lo solicitado, he incluido el código que estoy tratando de modificar.

Private Sub CommandButton1_Click()
    Dim filename As String, nextrow As Long, MyFolder As String
    Dim MyFile As String, text As String, textline As String, prog As String

    MyFolder = "M:\CNC Programs\Haas lathe programs\Haas ST30 programs\Programs\Programs in .txt format"
    MyFile = Dir(MyFolder & "*.txt")

    Do While MyFile <> ""
        Open (MyFolder & MyFile) For Input As #1
        Do Until EOF(1)
            Line Input #3, textline
            text = text & textline 
        Loop
        Close #1
        MyFile = Dir()
        Debug.Print text
        nextrow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row + 1
        Sheet1.Cells(nextrow, "A").Value = Mid(text, prog)
        text = "" 'reset text
    Loop
End Sub
-3
Sam McClintock 29 jul. 2016 a las 13:05

2 respuestas

La mejor respuesta

Como no tiene mucha experiencia con vba, aquí hay algunos puntos que podría querer buscar en Google y juntar los resultados

  • Abra un archivo de texto en Excel VBA (debe comenzar con eso e intentar leer un archivo)
  • Recorra todos los archivos en una carpeta determinada con Excel VBA

Su código debe hacer lo siguiente.

  • obtener una lista de todos los archivos que desea cargar
  • abre cada archivo de esa lista
  • leer la tercera y cuarta línea de ese archivo
  • copia las líneas para sobresalir.

Hay muchos ejemplos en Internet, una vez que aprenda a buscar

0
Mister 832 29 jul. 2016 a las 10:20

Después de unas horas y con la ayuda de un amigo se nos ocurrió esto, hace más o menos lo que necesitaba.

Sé cómo quiero mejorarlo, solo necesito averiguarlo ahora. De nuevo, estoy seguro de que es un truco sencillo. ¡¡¡Perseverancia!!!

Lo que quiero hacer con esto ahora, si puede, es tomar mi directorio
'M: \ Programas CNC \ Programas Haas Mills \ Todos los programas Mill. Formato .txt \' y escanee todas las carpetas subsiguientes para dichos archivos .txt y extraiga la misma información en un libro de trabajo.

Si lo averiguo, actualizaré la publicación nuevamente. Gracias por ponerme en el camino correcto, señor 832.

Private Sub CommandButton1_Click()
  Dim MyMask As String, nextrow As Long, MyFolder As String
  Dim MyFile As String, text As String, textline As String
  Dim posCommentStart As String, posCommentFinish
  Dim iLine As Integer

MyFolder = "M:\CNC Programs\Haas Mills programs\All Mill Programs .txt format\HAAS MINI-MILL BALLPADS & BALLPINS\"
MyMask = MyFolder & "*.txt"
MyFile = Dir(MyMask)

Do While MyFile <> ""
    iLine = 0
    Open (MyFolder & MyFile) For Input As #1
    Do Until EOF(1) Or iLine >= 4
        iLine = iLine + 1
        Line Input #1, textline
        If iLine >= 3 Then
           text = text & textline 'second loop text is already stored -> see reset text
        End If

    Loop
    Close #1
    MyFile = Dir()
    Debug.Print text

    posCommentStart = InStr(text, "(")
    posCommentFinish = InStr(text, ")")

    If posCommentStart > 0 Then

        nextrow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1

        ActiveSheet.Cells(nextrow, "A").Value = Left(text, posCommentStart - 2)
        ActiveSheet.Cells(nextrow, "B").Value = Mid(text, posCommentStart +        1, posCommentFinish - posCommentStart - 1)

    End If

    text = "" 'reset text

Loop
End Sub
0
Sam McClintock 3 ago. 2016 a las 05:54