Saltar al contenido

'No coinciden los tipos'


Recommended Posts

publicado

Buenos días, 

Tengo un  formulario en VBA en el cual el usuario introduce 32 valores y el programa compara si hay una diferencia entre algunos de ellos mayor de diferentes parámetros.

Tengo una función que pinta el fondo de las textbox de rojo o amarillo cuando se superan estos parámetros.

Funciona perfectamente, pero cuando borro uno de los valores introducidos (por ejemplo porque me he equivocado al introducirlo) me salta el error 13 'no coinciden los tipos'. Soy consciente que es porque pasa de comparar dos números a un numero y un "null" pero simplemente quería saber si la función puede esperar a que haya un valor para compararlo y así no tener que reiniciar el formulario.

Antes tenía esta función asignada a un botón pero como se ejecutaba solo al final no había problema pues podía cambiar los valores antes de ejecutarla y las comparaba todas a la vez, ahora se ejecuta cada vez que edito una celda par y compara esta con la anterior (1-2, 3-4, 5-6...) en tiempo real.

Se me había ocurrido ponerle un filtro como <> null o >0, pero al ser recurrente tras escribir un número salta esa barrera y cuando lo borro para corregirlo ya está dentro de la función y da ese problema.

----------

Function CompararRojoAmarillo(dir1, dir2, R, Y, ByRef Rojo, ByRef Amarillo)

'dir1 = Comparando 1
'dir2 = Comparando 2
'R = Valor para que sea rojo
'Y = Valor para que sea amarillo

'If Controls(dir1).Value > 0 And Controls(dir2).Value > 0 Then       

'If Controls(dir1).Value <> null And Controls(dir2).Value <> null Then       <---- filtros que se me habían ocurrido

    If Abs(Controls(dir1).Value - Controls(dir2).Value) >= R Then  <------ el error me salta aquí
            Controls(dir1).BackColor = vbRed
            Controls(dir2).BackColor = vbRed
            Rojo = 1
        Else
            If Abs(Controls(dir1).Value - Controls(dir2).Value) >= Y Then
                Controls(dir1).BackColor = vbYellow
                Controls(dir2).BackColor = vbYellow
                Amarillo = 1
            Else
                Controls(dir1).BackColor = vbWhite
                Controls(dir2).BackColor = vbWhite
            End If
        End If
        
End If

End Function

 

--------

Tengo más comparaciones que simplemente 1-2, 3-4, 5-6 en otras funciones pero esas me funcionan bien y recurren a esta así que tampoco me gustaría cambiarla por completo.

Es una funcion dentro de un archivo con muchos mas procedimientos, por eso no paso el fichero completo, cualquier duda al respecto del archivo no obstante la aclararé sin problema

Muchas gracias y perdonen cualquier incumplimiento del formato pues esta es mi primera vez en este foro.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.