Visual Basic - Función de validación de campo para impresión en archivo TXT.

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

Función de validación de campo para impresión en archivo TXT.

Publicado por Cristian (5 intervenciones) el 09/06/2017 23:19:54
Buenas tardes,
Me encuentro diseñando una macro que una de las funciones es generar una archivo plano en txt separado por “;” de una base de datos de Excel, Esta base de datos se encuentra formulada porque se alimenta de otra base de datos (en donde se valida que si se encuentra diligenciado ingrese una información pero si está vacío déjemelo vacío).

El problema es que tengo el siguiente código para generar el archivo txt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub CommandButton3_Click()
    Dim i As Integer, nFilas As Integer, _
        j As Integer, nColum As Integer
 
   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
            Print #9, .Cells(i + 1, j);: If j < nColum Then Print #9, ";";
        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"

El inconveniente es que la base de datos original tiene un total de 500 posibles registros pero cuando solo ingreso por ejemplo 2 me genera el txt perfecto para los 2 registros pero para los demás 498 registros como se encuentra formulado pero sin información me lo toma como vacío lo que genera que en el txt me muestra los 500 registros pero los que no están diligenciados me los muestra en una cadena de ; ; ; ; ; ; ; ; ;…… etc .

Adjunto el documento ejemplo de TXT.

Mi consulta es: ¿Qué condicional le puedo agregar a mi código? Para que solo me muestre los registros que estén diligenciados así esté formulada la celda.

Agradezco mucho su colaboración.
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.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Función de validación de campo para impresión en archivo TXT.

Publicado por Antoni Masana (558 intervenciones) el 12/06/2017 08:23:02
Es tan sencillo como 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
Private Sub CommandButton3_Click()
    Dim i As Integer, nFilas As Integer, _
        j As Integer, nColum As Integer
 
   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
        if .Cells(i + 1, j) <> "" Then
           For j = 1 To nColum
               Print #9, .Cells(i + 1, j);: If j < nColum Then Print #9, ";";     
           Next
           Print #9, ""                                                           
        End If
    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"


Excel no elimina las filas que han tenido datos, cuando eliminas una o varias filas o columnas desplaza el texto y deja al fondo las vacías como celdas en uso.

Por lo tanto lee tantas filas como la la vez que tuvo más.
Y lo mismo pasa con las columnas lee tantas como la vez que tuvo más.

O dicho de una forma práctica:

En una hoja nueva llenas de datos 2 líneas y 15 columnas, la macro exportada 2 líneas y 15 columnas
Borras todo.

En la misma hoja llenas de datos 20 líneas y 40 columnas, la macro exportada 20 líneas y 40 columnas
Borras todo.

Si ahora vuelves a llenar de datos 2 líneas y 15 columnas, la macro exportada 20 líneas y 40 columna

Para evitar esto debes poner condicionales o buscar a mano hasta fila y columnas tienes datos.
Si no tienes celdas vacías por el medio hasta que encuentres una vacía.
En caso contrario paras cuando por ejemplo encuentre 15 celdas seguidas vacías.

Fácil verdad.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
sin imagen de perfil
Val: 9
Ha disminuido su posición en 4 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Función de validación de campo para impresión en archivo TXT.

Publicado por Cristian (5 intervenciones) el 12/06/2017 21:26:28
Muchas gracias Sr Antoni por su colaboración, inquietud solucionada.
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