Visual Basic para Aplicaciones - Codigo Ansi en generador de Archivo Plano

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

Codigo Ansi en generador de Archivo Plano

Publicado por Cristian (5 intervenciones) el 20/07/2017 00:12:36
Buenas tardes,

Tengo una macro que genera archivo plano de una base de datos de Excel, por concepto de la finalidad del archivo plano requiero que una palabra en especifico se genere reemplazando el caracter (ó) por (ó) en código ansi, lo que ocurre es que en la base de datos de Excel la palabra por ejempo (Unión) la genero como (Unión) pero al momento de realizar la acción de generar el archivo plano me lo genera con el caracter de tilde (Unión).

Éste es el código para la generación de Archivo Plano:

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
Private Sub CommandButton3_Click()
 
    Dim i As Integer, nfilas As Integer, j As Integer, nColum As Integer
 
    If Range("E7").Value <> "" Then
 
    With Worksheets("BD Qmatic Cliente")
 
        nfilas = .Range("A2", .Range("A2").End(xlDown)).Cells.Count
        nColum = .Range("A1", .Range("A1").End(xlToRight)).Cells.Count
 
        Open Range("E7").Value & "\Archivo Plano Cliente.txt" For Output As #9
 
      For i = 1 To nfilas
            For j = 1 To nColum
            If .Cells(i + 1, 1) <> "" Then
            Print #9, .Cells(i + 1, j);: If j < nColum Then Print #9, ";";
            End If
            Next
            Print #9, ""
 
        Next
        Close #9
 
    End With
 
    MsgBox "Se ha creado con éxito el archivo plano de Cliente, por favor verifique la ruta especificada.", vbInformation, "Generador de Archivo Plano"
 
    Else
 
    MsgBox "No ha ingresado una ruta de destino", vbInformation, "Generador de Archivo Plano"
 
    End If

alguien podría colaborarme.

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: 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

Codigo Ansi en generador de Archivo Plano

Publicado por Antoni Masana (498 intervenciones) el 20/07/2017 22:26:34
Con este problema me encontré una vez, en MS-DOS las vocales acentuadas y algún que otro carácter es diferente en Windows y la solución es crear una tabla o dos cadenas de texto.

para pasar de MS-DOS a Windows

1
2
3
4
5
6
7
8
9
10
Tabla(1) = "áéíóú"
Tabla(2) = "ßÚݾ·"
 
For a = 1 to 5
    For b = 1 to len(Texto)
        If Mid$(Tabla(1), a, 1) = Mid$(Texto, b, 1) Then
          ' --- Cambiar el carácter de la posición b del texto por el carácter Mid$(Tabla(2), a, 1)
        End If
    Next
Next

Para pasar de Windows a MS-DOS es lo mismo pero invirtiendo las tablas: IF es con Tabla(2) y el Cambio con Tabla(1)

Los elementos de la primera tabla son los caracteres especiales en el entorno done se ejecute el programa, en el vemos correctamente las vocales y en la segunda tabla los mismos caracteres y en el mismo orden que la primero pero en el otro entorno y todo es cuestión de ir cambiando caracteres.

Saludos.
\\//_

P.D. El contenido de la segunda tabla puede no ser correcto.
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

Codigo Ansi en generador de Archivo Plano

Publicado por JuanC (565 intervenciones) el 21/07/2017 01:38:29
otra opción que puede servir es usar Replace

Ej:

1
sTexto = VBA.Replace(sTexto, VBA.Chr(CLng("&HA0")), "")  '//valor hexa del ascii a reemplazar
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: 8
Ha aumentado su posición en 5 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Codigo Ansi en generador de Archivo Plano

Publicado por Cristian (5 intervenciones) el 21/07/2017 15:07:05
Sr Antoni buenos días,

No me queda claro en que parte debo agregar este código.
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

Codigo Ansi en generador de Archivo Plano

Publicado por Antoni Masana (498 intervenciones) el 24/07/2017 14:39:16
Justo antes del Print #9, .Cells(...

Te hago un ejemplo aunque puede haber algunas diferencias con la versión definitiva.

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
Private Sub CommandButton3_Click()
    Dim i As Integer, nfilas As Integer, j As Integer, nColum As Integer, Tbla(2) as String
    Tabla(1) = "áéíóú"
    Tabla(2) = "ßÚݾ·"
 
    If Range("E7").Value <> "" Then
        With Worksheets("BD Qmatic Cliente")
            nfilas = .Range("A2", .Range("A2").End(xlDown)).Cells.Count
            nColum = .Range("A1", .Range("A1").End(xlToRight)).Cells.Count
            Open Range("E7").Value & "\Archivo Plano Cliente.txt" For Output As #9
            For i = 1 To nfilas
                For j = 1 To nColum
                    If .Cells(i + 1, 1) <> "" Then
 
                        For a = 1 to 5
                            For b = 1 to len(Texto)
                                If Mid$(Tabla(1), a, 1) = Mid$(Texto, b, 1) Then
                                  ' --- Cambiar el carácter de la posición b del texto por el carácter Mid$(Tabla(2), a, 1)
                                End If
                            Next
                        Next
 
                        Print #9, .Cells(i + 1, j);: If j < nColum Then Print #9, ";";
                    End If
                Next
                Print #9, ""
            Next
            Close #9
        End With
        MsgBox "Se ha creado con éxito el archivo plano de Cliente, por favor verifique la ruta especificada.", vbInformation, "Generador de Archivo Plano"
    Else
        MsgBox "No ha ingresado una ruta de destino", vbInformation, "Generador de Archivo Plano"
     End If

Saldos.
\\//_
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