Organizar valores numérico de manera ascendente

Busco organizar los valores de tal manera que si en un cuadro de texto agrego un valor de 4 dígitos o de 6

Este valor se modifique de manera ascendente en pares de números por ejemplo

4510 cambiaría por 1045 o 2800 ese se cambiaría por 0028 este igual seria si el valor es de 6 dígitos

451050 cambiaría a 104550

Si el valor es es de dos dígito se quedaría tal cual ingreso

Y si el valor es de un solo dígito, tres o cinco me lance un mensaje que idique que falta un numero por dijitar

Respuesta
1

Suponiendo que el campo se llame Texto, en el evento AfterUpdate

Private Sub Texto_AfterUpdate()
Dim Cadena(1 To 20) As String, i As Integer, j As Integer, _
    NumPares As Integer, Xs As String
    'vemos si es par/impar '
    If Len(Me.Texto) Mod 2 <> 0 Then
        MsgBox "Este es impar"
        Exit Sub
    End If
    'calculamos el numero de pares que tenemos y troceamos la cadena en una tabla    '
    NumPares = Len(Me.Texto) / 2
    For i = 1 To NumPares
        Cadena(i) = Mid$(Me.Texto, 1 + (i - 1) * 2, 2)
    Next i
    'ordenamos la tabla con el método burbuja       '
    For i = 1 To NumPares - 1
        For j = i + 1 To NumPares
            If Cadena(i) > Cadena(j) Then
                Xs = Cadena(i)
                Cadena(i) = Cadena(j)
                Cadena(j) = Xs
            End If
        Next j
    Next i
    'recomponemos el nuevo valor ordenado            '
    Me.Texto = ""
    For i = 1 To NumPares
        Me.Texto = Me.Texto & Cadena(i)
    Next i
End Sub

Hola como estas gracias por la ayuda estuve probando el código pero da un error al ser ejecutado

'recomponemos el nuevo valor ordenado '
Me.IdProd = ""

El cual no me permite determinar si me funcionara

¿Y el error es? ...

Se detiene el proceso y el código se pone en amarillo

 'recomponemos el nuevo valor ordenado '
    Me.Texto = ""

y no me permite evaluar si me funcionaria

Que tenías un error en esa línea ya lo dijiste antes ... pero sigues sin decir cuál es el error

1 respuesta más de otro experto

Respuesta
2

El único problema que le veo es que no dices cuando y donde quieres que te cambie el valor. Me explico, ¿Quieres qué al escribir 4510, en ESE MISMO cuadro de texto te lo cambie por 1045? ¿El resultado 1045 tiene que aparecer en otro cuadro de texto? ¿En el formulario tienes ya valores o ahora mismo está vacío? ¿Lo digo por si quieres actualizar los campos que ya tienes o vas a empezar a poner valores?

si que en el mismo cuadro de texto cuando pierda el enfoque se cambie

Supongamos que el cuadro de texto de llama NValor. Para que te pueda guardar el valor 0028 como tal el campo NValor tiene que ser texto, ya que si no te lo cambia a 28. Puedes poner, por ejemplo, en el evento Después de actualizar de ese mismo cuadro de texto

Select Case Len([NValor])
Case 1, 3, 5
MsgBox "El número es impar, corrígelo"
DoCmd.CancelEvent
Case 4
NValor = Right([NValor], 2) & "" & Left([NValor], 2)
Case 6
NValor = Mid([NValor], 3, 2) & "" & Left([NValor], 2) & "" & Right([NValor], 2)
End Select

Parte del código funciona

Si el mensaje se origina como puedo hacer un focus en el cuadro de texto para corejir el error

Y en el (case 6) no hace nada

Pero hay un detalle los números cambian de posición sin antes evaluar si el numero es mayo que el que esta delante del

La idea es que queden organisados de menor a mayor en rondas de 2 dígitos

Del 01 al 00 quedaría igual

2211 quedaría 1122

1122 quedaría 1122

332211 quedatia 112233

223311 quedaría 112233

111133 quedaría 112233

La primera pregunta no estaba redactada claramente. Para hacer lo que dices tendrías que poner

case is= 4

If left([nvalor],2)<right([nvalor],2) then

nvalor=right([nvalor]&""&left([nvalor],2)

end if

case is= 6

if left([nvalor],2) >mid([nvalor]3,2) and mid([nvalor],3,2)>right([nvalor],2) the

nvalo=right([nvalor],2)&""&mid([nvalor],3,2)&""&left([nvalor],2)

Y así las combinaciones de los tres grupos.

En el caso del mensaje, supongamos que el cuadro de texto siguiente a Nvalor se llama Resultado, deja el código como

MsgBox "El número es impar, corrígelo"
Resultado. SetFocus
NValor. SetFocus

Ya solucione lo del setfocus en el mensaje

Y el case if =6 me sige dando problemas no se egecuta provocando una interruccion cuando se ejecutan 6 dígitos lo he revisado pero no doy con la solución

Lo mejor es que, si quieres, repito, si quieres me mandes un mensaje a [email protected] y te mando un ejemplo. Si lo haces, en el asunto del mensaje pon tu alias Class Regald, ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas