Bueno esto sucede porque el IDE "quiere" asegurarse de que tu función no devuelva un valor nulo y esto provoque un error en tu aplicación, concretamente en el proceso que invoca dicha función.
Okey, tienes una función sencilla y a manera de ejemplo (ya sea pública o privada):
Código:
Private Function tiene28Dias(ByVal iAnio As Integer, ByVal iMes As Integer)
'Código de la función
End Function
Esta función, en apariencia, pretende verificar si el mes que pasamos por el parámetro "iMes" tiene 28 días. Bien, como toda función devuelve algo, ese "algo" tiene un tipo de datos. Es recomendable especificar el tipo de dato que va a devolver tu función. En este caso la lógica nos llevaría a esperar un valor Boolean (verdadero o falso).
Entonces lo especificamos:
Código:
Private Function tiene28Dias(ByVal iAnio As Integer, ByVal iMes As Integer) As Boolean
'Código de la función
End Function
Bien, como pudiste apreciar, agregamos la especificación "As Boolean" al final de la primer línea de la función indicando así que esperamos como respuesta un valor Boolean (verdadero o falso). Habrás notado tambien, que desde un inicio especificamos el tipo de dato que esperamos como parámetros (iMes As Integer), un número entero al igual que para "iAnio". Es lo mejor, especificar el tipo de datos con el que vamos a trabajar en todo.
Ahora agreguemos funcionalidad a nuestra función:
Código:
Private Function tiene28Dias(ByVal iAnio As Integer, ByVal iMes As Integer) As Boolean
If Date.DaysInMonth(iAnio, iMes) = 28 Then
Return True
End If
End Function
En este caso estamos verificando si efectivamente el mes tiene 28 días, de ser asi devolvemos "True", pero... ¿y si no?. Entonces se nos va a mostrar nuevamente esa advertencia, puesto que existe la posibilidad de que el mes no tenga 28 días pero no estamos especificando qué hacer en tal caso. Por lógica la función devolvería "False" porque se trata de un valor Boolean que por default es "False". ¿Pero si tuvieramos que devolver un numero especifico o una respuesta literal como un "SI" o un "NO"? Efectivamente tu proceso puede trabajar bien y no devolver error alguno a pesar de que se te indica que existe la posibilidad. Sinembargo, por buena costumbre debemos asegurarnos de disminuir el margen de error de nuestra aplicación al 100% Entonces, vamos a asegurarnos de que nuestra función devuelva todas las posibles respuestas. En este caso Verdadero o Falso.
Código:
Private Function tiene28Dias(ByVal iAnio As Integer, ByVal iMes As Integer) As Boolean
If Date.DaysInMonth(iAnio, iMes) = 28 Then
Return True
Else
Return False
End If
End Function
Ahora sí, nuestra función está facultada para devolver cualquiera de los dos valores que la aplicación espera. Una forma resumida sería esta:
Código:
Private Function tiene28Dias(ByVal iAnio As Integer, ByVal iMes As Integer)
Return (Date.DaysInMonth(iAnio, iMes)) = 28
End Function
Con esto convertimos en automatico el resultante a Boolean, ya sea True o False, puede devolver ambas.
En resumen tienes que especificar el tipo de datos con que trabaja tu funcion y asegurarte de que ésta devuelva una respuesta en cualquier posibilidad o situación, y que ésta, sea del tipo de datos correcto, cierra toda posibilidad de que devuelva un valor nulo.
De igual forma, no invoques "Exit Function" sin antes haber devuelto una respuesta.
Espero haberte sido de ayuda.
Saludos!