Excel - Problema generar fichero plano en base a EXCEL

 
Vista:
sin imagen de perfil

Problema generar fichero plano en base a EXCEL

Publicado por Alex (2 intervenciones) el 22/10/2013 09:09:19
Buenas,

tengo un EXCEL con una serie de registros con datos por columnas, pretendo extraer registro a registro en un fichero plano.

El problema lo tengo con los campos en negativo, es el siguiente:

Tengo una celda con el siguiente valor -138106,51 (celda definida como numérica con dos decimales).

Para extraerla, en VB tengo una función que genera el fichero plano, solo pongo el tratamiento del campo problemático (que en este caso es el único que llega con valor negativo, con el resto también pasaría).
Declaración:
Dim sMTRESVALIA As String 'MTRESVALIA

Captura de dato:
sMTRESVALIA = Format(Cells(Indtab, lColini + 33), "0.00") * 100

Escribir en fichero plano:
Print #iFile, Left(Format(Trim(sMTRESVALIA), "000000000000000") & Space(15), Chr(13);

Y el resultado es:
-00000001381065

Pierdo una posición decimal.

Alguien sabe como solucionarlo para que el campo apareciera así:
-00000013810651

Perdiendo un cero a la izquierda en vez de una posición hábil.

Muchas gracias por vuestra 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 JuanC

Problema generar fichero plano en base a EXCEL

Publicado por JuanC (1237 intervenciones) el 22/10/2013 12:33:53
en el caso de los números negativos podés usar la función abs() (valor absoluto)
y agregarle el signo negativo 'manualmente'...

Saludos, desde Baires, JuanC
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

Problema generar fichero plano en base a EXCEL

Publicado por Alex (2 intervenciones) el 22/10/2013 13:31:43
Muchas gracias,

He hecho una función que dependiendo de si es negativo el campo orígen o no.

Obtengo el campo así:
sMTRESVALIA = getDecimal(Format(Cells(Indtab, lColini + 33), "0.00"), 15)

y lo paso por esta función:

Public Function getDecimal(sDecimal As String, sTam As String) As String

sDecimal = sDecimal * 1000
If sDecimal >= 0 Then
getDecimal = sDecimal / 10
If sTam = 15 Then
getDecimal = Left(Format(Trim(getDecimal), "+000000000000000") & Space(16), 16)
End If
If sTam = 18 Then
getDecimal = Left(Format(Trim(getDecimal), "+000000000000000000") & Space(19), 19)
End If
Else
getDecimal = sDecimal
If sTam = 15 Then
getDecimal = Left(Format(Trim(getDecimal), "0000000000000000") & Space(16), 16)
End If
If sTam = 18 Then
getDecimal = Left(Format(Trim(getDecimal), "0000000000000000000") & Space(19), 19)
End If
End If
Exit Function
End Function

Es un poco chapucero,
pero efectivo.

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