sábado, 17 de octubre de 2020

38 - Funciones de Conversión para controles TextBox.

Frecuentemente se encuentran consultas acerca de 'errores' al trabajar con controles del tipo TextBox. Errores que no son tales si recordamos que esos controles guardan su información en formato 'Texto'.

Así por ejemplo, en el Video 38 se muestra la comparación entre 2 controles:

TextBox3 = "537"   TextBox5 = "1032"

Si TextBox3 < TexBox5 -------> pinte el control de rojo .... pero veremos que no se pinta. Porque entre textos el primero es mayor.

Por lo tanto, ya sea para realizar cálculos entre estos controles y datos de la hoja o para realizar comparaciones se necesitará convertirlos al formato número según se requiera.

1 - Función VAL: convierte un texto en un valor numérico:

      "537"  ------->  537

      "1432" ------>  1432

Pero si enviamos un valor numérico con decimales a un control TextBox, la función VAL truncará la parte decimal mostrando solamente la parte entera.

Por ejemplo: TextBox3 = 537,40      celda = 1430,50

Al realizar una suma:  suma = VAL(TextBox3) + celda = 537 + 1430,50 =  1957,50 (lo correcto: 1967,90)

2 - Función CDBL: convierte 'texto' con decimales a valor numérico con decimales.

Por ejemplo: TextBox3 = 537,40      TextBox5= 1430,50

Al realizar una suma:  suma = CDBL(TextBox3) + CDBL(TextBox5)

                                     suma = 537,40 + 1430,50 =  1967,90)

IMPORTANTE: La función CDBL dará error si se intenta convertir el contenido de un control vacío. Por lo tanto habrá que contemplar ese posible error, siendo los siguientes ejemplos algunos de los modos posibles.

Ejemplo 1: colocando una instrucción On Error antes de manipular ese control vacío:

'colorear según condición del resultado

On Error Resume Next

If CDbl(TextBox3) < TextBox5.Value Then

    TextBox5.BackColor = &HFF&                  '< rojo

ElseIf CDbl(TextBox3) = Range("G" & filx).Value Then

    TextBox5.BackColor = &H80FF&                '=naranja

Else

    TextBox5.BackColor = &HFFFF&                '> amarillo

End If

Ejemplo 2: evaluar si el control está vacío y en ese caso tomar otra decisión. En este ejemplo se coloca 1 en la celda, sino el valor convertido del control TextBox16:

If TextBox16 <> "" Then

    hox.Range("K" & fily) = CDbl(TextBox16)

Else

    hox.Range("K" & fily) = 1

End If


Ver VIDEO N° 38

No hay comentarios.:

Publicar un comentario