Mostrando entradas con la etiqueta txt. Mostrar todas las entradas
Mostrando entradas con la etiqueta txt. Mostrar todas las entradas

2014-06-23

Exportar un rango de Excel al bloc de notas mediante VBA

Title Un aspecto importante al trabajar en una aplicación es la salida de datos o exportación de los mismos. Por ejemplo, para exportar datos en un formato de texto compatible con otras aplicaciones o sistemas. En otra entrada quizá trataremos las diferentes alternativas. En esta ocasión exportamos un rango como un fichero de texto (delimitado por tabulaciones) y lo abrimos con el bloc de notas.

Opción 1

La primera alternativa destaca por su brevedad. Abre el bloc de notas y pega el rango de CurrentRegion (región actual). El fichero de texto lo tendremos que guardar antes de cerrar. El problema es que usar SendKeys en VBA puede causar problemas imprevistos. En este caso desactiva la tecla Bloq Num.

Sub Rango_a_Bloc_de_notas1()
    Range("A1").CurrentRegion.Copy 'Celda de la región actual
    Shell "notepad.exe", vbNormalFocus
    SendKeys "^V"
    Close
End Sub

Opción 2

En esta segunda opción prescindimos de SendKeys. Creamos un libro nuevo de Excel, pegamos el contenido de CurrentRegion del libro inicial, guardamos el nuevo libro como fichero de texto con el nombre prueba.txt y abrimos el nuevo fichero de texto con el bloc de notas.

Sub Rango_a_Bloc_de_notas2()
    Application.ScreenUpdating = False
    Range("A1").CurrentRegion.Copy 'Celda de la región actual
    Dim ruta As String, wb As Object
    ruta = ThisWorkbook.Path & "\prueba.txt"
        Set wb = Workbooks.Add
        wb.Worksheets(1).Paste
        wb.SaveAs Filename:=ruta, FileFormat:=xlText
        Application.DisplayAlerts = False
        wb.Close
        Application.DisplayAlerts = True
    Shell "notepad.exe " & ruta, vbNormalFocus
End Sub

2013-06-12

Reemplazar carácter en un fichero de texto con VBA en Access

Title En alguna ocasión me he encontrado con el problema de descargar un fichero de texto delimitado por comas cuando necesitaba que el delimitador fuera el punto y coma (mal funcionamiento del programa de inteligencia de negocio).

Quizá la mejor opción sería cambiar el delimitador de nuestras especificaciones de importación en Access. Visita este artículo para ver como acceder a las especificaciones guardadas, y modifica el Delimitador de campo.


También tenemos otras alternativas:

1. Usar el Excel, Bloc de notas, u otro editor de texto como Notepad++, para reemplazar un carácter por otro. Cuando el número de ocurrencias es muy grande, millones en el caso de fichero de tamaño considerable, el proceso puede ser algo lento.

2. Utilizar código de VBA acelerando el proceso notablemente, evitando tener que abrir otros programas, reduciendo la probabilidad de errores y pudiendo llamarlo desde una macro u otro módulo.

Hay que copiar el siguiente código en un módulo de Ms Access:
Public Sub ReemplazarCaracteresAccess()

Dim folderPath As String
folderPath = Application.CurrentProject.Path & "\" 'Ruta del Access

Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(folderPath & "Inicial.csv") Then
    Set objStream = fso.OpenTextFile(folderPath & "Inicial.csv", 1, False, 0)
End If
    Set objCopy = fso.CreateTextFile(folderPath & "Final.csv")

For x = 1 To 5  'Se salta el nº de líneas indicadas 
    objStream.readline
Next x
 
Do While Not objStream.AtEndOfStream
    strOldLine = objStream.readline
    i = 1
    NewArray = Split(strOldLine, ",")'Carácter reemplazado: ,
       strNewLine = NewArray(0)
       
    Do Until i = UBound(NewArray) + 1
         strNewLine = strNewLine & ";" & NewArray(i)'Carácter nuevo: ;
         i = i + 1
    Loop
    objCopy.WriteLine strNewLine
Loop

End Sub
Notas: El fichero Inicial.csv debe de estar en la misma ruta del Access. El código creará un fichero Final.csv en dicha ruta con el carácter reemplazado. Borrar estas 3 líneas en el caso de que en el fichero de texto no haya que saltarse líneas en blanco y que provocarían un error:
For x = 1 To 5  'Se salta el nº de líneas indicadas 
    objStream.readline
Next x
También se puede usar este código para ficheros *txt. Ejemplo: Inicial.txt y Final.txt

Entradas relacionadas:

2013-05-10

Unir ficheros de texto con VBA Access

En la entrada anterior explicamos como unir ficheros de texto con VBA en Excel. En Access, el código es idéntico salvo la propiedad para obtener la ruta del fichero Access: Application.CurrentProject.Path
Sub UnirFicherosTexto()
  
    Dim r As String
    r = Application.CurrentProject.Path
    Dim SrcFiles, CurrSrc As String
    Dim DestFile As String, Counter As Integer
    Dim TextLine As String
    SrcFiles = Array(r & "\Fichero1.txt", r & "\Fichero2.txt")
    Open r & "\Fichero3.txt" For Output As #1
    For Counter = 0 To UBound(SrcFiles)
        Open SrcFiles(Counter) For Input As #2
        Do While Not EOF(2)
            Line Input #2, TextLine
            Print #1, TextLine
        Loop
        Close #2
    Next
    Close #1
    
End Sub
Para unir más de dos ficheros, los añadimos en el Array.
SrcFiles = Array(r & "\Fichero1.txt", r & "\Fichero2.txt", r & "\Fichero3.txt")
Entradas relacionadas: Unir ficheros de texto con VBA Excel

2013-05-03

Unir ficheros de texto con VBA Excel

En ocasiones necesitamos unir varios ficheros de texto (.txt o .csv). Por ejemplo, para consolidar dos ficheros descargados en distintos momentos.

Modificamos un ejemplo publicado por Jim Rech en google groups. Hemos transformado la referencias absolutas en relativas. Tan sólo hay que copiar el código en un módulo de Excel y guardar el fichero si es nuevo (o devolvería error pues la propiedad Application.ThisWorkbook.Path está vacía hasta que no se guarda el fichero).

Copiamos los dos ficheros (.txt o .csv) que deseamos unir, Fichero1 y Fichero2, en la misma ruta del Excel con el código. En esa ruta se creará el Fichero3 de salida, con la unión del 1 y el 2, y se sobreescribirá si ya existe.
Sub UnirFicherosTexto()
  
    Dim r As String
    r = Application.ThisWorkbook.Path
    Dim SrcFiles, CurrSrc As String
    Dim DestFile As String, Counter As Integer
    Dim TextLine As String
    SrcFiles = Array(r & "\Fichero1.txt", r & "\Fichero2.txt")
    Open r & "\Fichero3.txt" For Output As #1
    For Counter = 0 To UBound(SrcFiles)
        Open SrcFiles(Counter) For Input As #2
        Do While Not EOF(2)
            Line Input #2, TextLine
            Print #1, TextLine
        Loop
        Close #2
    Next
    Close #1
    
End Sub
Para unir más de dos ficheros, los añadimos en el Array.
SrcFiles = Array(r & "\Fichero1.txt", r & "\Fichero2.txt", r & "\Fichero3.txt")

Entradas relacionadas

Nube de datos