Rellenar con ceros un capo

Antes de nada agradecer vuestra ayuda, me gustaría saber si es posible que a la hora de introducir una cuenta contable en un campo de un formulario de Access no sea necesario introducir todos los caracteres; las cuentas se separan por un punto o una coma y la aplicación rellena con ceros los dígitos que faltan. Ejemplo que al escribir 4.25 el campo se rellene a 9 dígitos 400000025.

1 Respuesta

Respuesta
1

Existen muchas formas, yo crearía una función pública para esto, algo como: (En un módulo inserte esta función)

Public Function strRellena(dblnro As Variant) As String
  strRellena = Left(dblnro, 1) & Format(Mid(dblnro, 3, 2), "00000000")
End Function

Y la llama así:

StrRellena(parámetro) donde parámetro es el contenido del campo:

Ej. StrRellena(4.25) retorna 400000025 (texto).

NOTA: El parámetro lo defino como Variant porque no sé si el valor es numérico o texto.

Si quiere una función más completa de tal forma que también pase como parámetro el número de ceros, esta le sirve:

Public Function strRellena2(dblnro As Variant, Optional intCeros As Integer) As String
'Rellena con ceros
If intCeros = 0 Then
strRellena2 = dblnro
Else
strRellena2 = Left(dblnro, 1) & Format(Mid(dblnro, 3, 2), String(intCeros, "0"))
End If
End Function

Sintaxis de llamada:

strRellena2(número,cantidad_de_ceros)

Ejemplo:

StrRellena2(4.25,4) ---- retorna ---- 40025

StrRellena2(4.25,5) ---- retorna ---- 400025

StrRellena2(4.25,6) ---- retorna ---- 4000025

StrRellena2(4.25,7) ---- retorna ---- 40000025

StrRellena2(4.25,8) ---- retorna ---- 400000025

StrRellena2(4.25,10) ---- retorna ---- 40000000025

¡Gracias! por el aporte

Gracias Eduardo de nuevo por el aporte, pero he notado que solo funciona cuando escribo un solo dígito antes del punto y dos dígitos después del punto, pero en realidad pueden ser varios los dígitos antes y después, ejemplo:

4.25              400000025

41.25            410000025

41.125          410000125

401.5            401000005

405.2564     405002564

lo único seguro es que pueden ser hasta cuatro dígitos antes del punto y hasta cuatro dígitos después del punto.

Pruebe con esta función:

Public Function strRellena3(dblnro As Variant, Optional intCeros As Integer) As String
'Rellena con ceros hasta completar 9 digitos
Dim posicion As Integer
posicion = InStr(1, dblnro, ".")
If intCeros = 0 Then
strRellena3 = dblnro
Else
strRellena3 = Left(dblnro, posicion - 1) & _
Format(Mid(dblnro, posicion + 1, Len(dblnro - posicion)), String(intCeros - posicion + 1, "0"))
End If
End Function

Ejemplos de llamada:

StrRellena3("405.2564", 9) ---> Retorna 405002564 Observe que se debe pasar es una cadena de caracteres

StrRellena3(Str(405.2564), 9) ---> Retorna 405002564 Observe que se si es un número se debe pasar convertido a cadena. Esto debido a la configuración regional.

Debido a que encontré inconsistencias cuando se pasaba el parámetro y este lleva coma (,) en lugar de punto (.) Cambia algunas cosas, esta es la nueva función.

Public Function llena_ceros(dblnro As Variant, Optional intCeros As Integer) As String
'Función para rellenar con ceros después del punto(.) O coma (,) hasta 9 dígitos
'dejando la parte numérica al final, pero anteponiendole ceros.
'Elaborado por: Eduardo Pérez Fernández
'Fecha: 23/12/2020 - Colombia
'El parámetro puede ser: texto o número
' texto ejemplo "41.25" o "41,25"
' numérico ejemplo 41.25
' Ejemplos de llamada:
' Parámetro texto con punto llena_ceros("41.2564", 9) --> Retorna 410002564
' Parámetro número con punto llena_ceros(41.2564,9) --> Retorna 410002564
' Parámetro texto con coma llena_ceros("41,2564", 9) --> Retorna 410002564
' Parámetro texto con punto llena_ceros("41624.25", 9) --> Retorna 416240025
' Parámetro texto con coma llena_ceros("41624,25", 9) --> Retorna 416240025
' Parámetro número con punto llena_ceros(41624.25,9) --> Retorna 416240025
Dim posicion As Integer
Dim encuentra As Integer
'Determino el parámetro se pasó con un punto o una coma
'si se pasó un coma (,)
encuentra = InStrRev(dblnro, ",")

If encuentra > 0 Then ' hay decimal y es una coma (,)
' remplazo por un punto (.)
dblnro = Replace(dblnro, ",", ".", 1)
End If
posicion = InStr(1, dblnro, ".")
If intCeros = 0 Then
llena_ceros = dblnro
Else
llena_ceros = Left(dblnro, posicion - 1) & _
Format(Mid(dblnro, posicion + 1, Len(dblnro - posicion)), String(intCeros - posicion + 1, "0"))
End If
End Function

Espero le sirva, si alguien la puede mejorar le agradezco hacerlo saber.

Buenos días Eduardo, de nuevo darte las gracias por dedicarme tu tiempo. Me da un error cuando abro el formulario, el campo es un cuadro de texto llamado CUENTA que no pertenece a ninguna tabla, es donde introduzco el numero de cuenta para posteriormente abrir un formulario basado en el campo de resultado con los ceros añadidos, pero me da el siguiente error

Al no tener ningún valor el campo CUENTA aparece el error y si le quito al campo Texto2 el valor de =llena_ceros([cuenta]) u omito el error, en el campo Texto3 le he definido que después de actualizar el Campo CUENTA que me realice el siguiente evento

Private Sub CUENTA_AfterUpdate()
Me.Texto3 = llena_ceros([cuenta])
End Sub

lo que hace es que me devuelve el valor del campo CUENTA igual solo cambiando la coma por el punto pero no añade los ceros

por favor dime que hago mal, mil gracias de nuevo.

El parámetro dblnro es obligatorio. Si puede envíeme la base de datos o el formulario a [email protected] y lo reviso.

Eduardo,  en un formulario que no esta basado en ninguna tabla, creo un campo de texto donde introduzco el numero de cuenta y necesito que en otro campo de texto que tampoco esta basado en ninguna tabla me de el resultado de añadir los ceros, perdona mi torpeza tampoco estoy muy ducho en esto, por eso te agradecería que indicases lo mas sencillo posible el procedimiento, de verdad que te agradezco muchísimo tu ayuda.

No puede hacer en el otro campo "Origen de datos"=llena_ceros(campo;9) por que le arroja el error, debe llamar la función es en el evento Después de Actualizar del primer cuadro de texto, algo como:

Private Sub ctlcuenta_AfterUpdate()
  Me.ctlrelleno = llena_ceros(Me.ctlcuenta, 9)
End Sub

En donde ctlcuenta es el cuadro de texto donde digita el número de la cuenta y ctlreleeno es el cuadro de texto que recibe la cuenta con ceros. Mire la imagen.

Y da lo mismo si dígito 42.24 con punto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas