Buenos días j_lete:
te paso un código para que si crees una pequeña aplicación y vayas
comprobando lo que necesitas.
Haz un formulario con dos cajas de texto, a una la llamas "txtAncho" y a la
otra "txtmultiploAncho", y un botón y lo llamas "cmdMultiplo", y en el evento
click del botón copias el código siguiente, incluso puedes comprobar como
actua con el procedimiento paso a paso, espero que te ayude en algo.
Saludos
On Error GoTo Err_cmdMultiplo_Click
Dim ancho As Variant
Dim multiploANCHO As Integer
If IsNull(Me.txtAncho.Value) Then 'comprobamos si hay algun valor en el
campo, en caso de no haberlo
MsgBox "Introduce un valor.", vbInformation, "Ancho" 'lanzamos el
mensaje para introducir un valor
Me.txtAncho.SetFocus 'le mandamos el foco al campo
Exit Sub 'y salimos de la Sub
End If
If IsNull(Me.txtmultiploAncho.Value) Then 'comprobamos si hay algun
valor en el campo, en caso de no haberlo
MsgBox "Introduce un valor.", vbInformation, "Multiplo Ancho" 'lanzamos
el mensaje para introducir un valor
Me.txtmultiploAncho.SetFocus 'le mandamos el foco al campo
Exit Sub 'y salimos de la Sub
End If
ancho = Me.txtAncho.Value
multiploANCHO = Me.txtmultiploAncho.Value
If multiploANCHO = 0 Then 'comprobamos si el multiplo del ancho es 0
MsgBox "Los múltiplos no pueden ser de 0." & Chr(13) & "Introduce un
múltiplo para el Ancho.", vbInformation, "Multiplos"
Me.txtmultiploAncho.SetFocus
Exit Sub
End If
'Este formato extrae los 3 primeros números si necesitas cambia el
formato.
If Format(ancho, "#,###") <> Format(ancho) Then 'el primer format
redondea el número sin decimales a las primeras 3 cifras y el segundo
devuelve el número que hay en el texbox
'comparamos si son distintos, si son distintos es porque llevan decimales
ancho = Mid(Format(ancho), 1, 3) + 1 'extaemos los 3 primeros
caracteres y le sumamos 1 , porque necesitamos el número inmediatamente
superior sin decimales
'MsgBox ancho
End If
If Not IsNumeric(ancho) Then 'comprobamos si no es un número
MsgBox "Introduce un número", vbInformation, "Ancho"
Me.txtAncho.SetFocus
Exit Sub
ElseIf ancho = 0 Then 'comprobamos si es un 0
MsgBox "Introduce un número", vbInformation, "Ancho"
Me.txtAncho.SetFocus
Exit Sub
Else
If IsNumeric(ancho) Then 'comprobamos si es un número
If ancho Mod multiploANCHO = 0 Then 'si el ancho dividido por el
módulo de su multiplo es 0 es porque es ya un multiplo.
MsgBox "El múltiplo del ancho es: " & ancho, vbInformation, "Multiplo
Ancho" 'lo sacamos por mensaje
Else 'en el caso que no sea 0
'creamos un bucle para que itere tantas veces hasta que sea 0 y
lo sacamos por mensaje
Do While ancho Mod multiploANCHO <> 0
ancho = ancho + 1
If ancho Mod multiploANCHO = 0 Then
MsgBox "El múltiplo del ancho es: " & ancho, vbInformation,
"Multiplo Ancho"
End If
Loop
End If
End If
End If
SeguirPorAqui:
Exit Sub
Err_cmdMultiplo_Click:
MsgBox "Se ha producido el error nº: " & Err.Number & " " &
Err.Description, vbInformation, "Aviso"
Resume SeguirPorAqui
Post by j_leteEn efecto, al superior o al inferior
Post by jmmirallesBuenos dias j_lete
¿lo que pretendes es calular un múltiplo de un número y si este número es
con decimales calcular su múltiplo inmediatamente superior?
Saludos
Post by j_leteEstoy viendo como calcular redondeos de multiplos de un numero (por ejemplo
25).Lo hago proguntado el resto de la división del numero entre 25 ([numero]
Mod 25), y si este es >=50, int(([numero]/25+1))*25 y si no,
int([numero]/25)*25.
El caso es que comparando con las funciones de excel redondear.mas y
redondear.menos, no siempre coinciden los resultados, por lo que no me fío
100% en mi cálculo.
Existen en access estas funciones?
Saludos