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.
Featured Replies
Archivado
Este tema está ahora archivado y está cerrado a más respuestas.
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.