Necesito ayuda sobre un mensaje de error en Excel

Intentaré expresarme lo mejor posible para hacer más entendible el error.
Bien, tengo una tabla denominada "teléfonos" con los campos "extensión y modelo" de la cual tengo realizada una consulta con los criterios "Como [Escribe el numero de extensión] para que busque el número de extensión. De esta consulta he realizado un formulario, el cual tiene botones ocultos para que en función del modelo del equipo, aparezca uno de ellos. Por ejemplo, si resulta que la extensión 2030 tiene el modelo 2, aparecerá el botón que te lleva a la información del modelo 2.
Pues bien, esto lo he hecho mediante este código VB el en formulario principal:
Private Sub Form_Load()
  Me.Comando41.Visible = False
  Me.Comando42.Visible = False
  Me.Comando43.Visible = False
Select Case (Me.Model_Tlf)
    Case (4018):
       Me.Comando41.Visible = True
    Case (4028):
       Me.Comando42.Visible = True
    Case (4068):
       Me.Comando43.Visible = True
End Select
End Sub
Y hasta aquí todo correcto. Ahora bien, si introduzco una extensión que no existe, el Select me da un error ya que "Me.model_Tlf es igual a NULL". He intentado hacer un If con esto, pero no me reconoce el valor NULL como un valor válido, es más, al intentar cerrarlo también me genera un error.
He tenido la brillante idea de que si en la consulta inserto una extensión que no exista. Esta me envíe un mensaje por pantalla diciéndome algo similar a "La extensión que usted ha introducido no pertenece a ningún teléfono, por favor vuelva a insertarla", y este vuelva a pedir la extensión y así sucesivamente hasta que se introduzca una valida. Con esto me ahorro que el valor del modelo nunca sea igual a NULL.
Después de mi extensa explicación. La pregunta es : ¿Cómo lo hago?

1 respuesta

Respuesta
1
Has hecho lo mas dificil, utilizar Select Case para mostrar u ocultar los controles. Te doy el código y te comento:
Private Sub Form_Load()
Me.Comando41.Visible = False
Me.Comando42.Visible = False
Me.Comando43.Visible = False
If Me.Model_Tlf.Value = "" Or IsNull(Model_Tlf) Or Me.Model_Tlf < 0 Then
MsgBox "Debe introducir una extensión valida, número mayor que cero", vbCritical, "Error de extensión"
Else
Select Case (Me.Model_Tlf)
Case (4018):
Me.Comando41.Visible = True
Case (4028):
Me.Comando42.Visible = True
Case (4068):
Me.Comando43.Visible = True
Case Else
Msgbox "La extensión introducida no consta en nuestra Base de Datos", vbInformation, "Extensión no encontrada"
End Select
End If
Te explico: El IF se pone al principio evaluando lo que se ha intoducido en el cuadro, si es un valor válido lanzo el Select Case si no no continua pero informo al usuario que debe cambiar el valor por uno válido. Case Else se utiliza si sabes que ya no puede haber más posibilidades que las anteriores y quieres informar al usuario.
Ayer vi tu respuesta, y me pareció muy oportuna. De hecho creí que era idónea, pero la he probado y me da el siguiente error: Me. Model_Tlf-Value = <introdujo una expresion que no tiene valor>.
Mi nivel en visual es un nivel muy básico, domino otros lenguajes de programación como ahora bien bash, o C/C++.  Pero respecto a la programación orientada a objetos, no se "nada".
Agradecería que me ayudases en esto, ya que es una base de datos para el trabajo, y el tiempo me está comiendo. Si no te importa me gustaría que me explicases el motivo por el cual da ese error, ya que, si en un futuro me vuelve a salir, poderlo aunque quizás no solucionar, al menos entender.
Gracias por tu ayuda.
Saludos
Perdona, pero he cometido un ORROR!
La linea correcta para model_Tlef es
Me.Model_Tlef = ""
.Value Se utiliza con botones de opción, casillas de verificación o en un grupo de opciones, es decir, expresa el valor de la opción.
De nuevo perdona el error que he cometido.
Un saludo.
He hecho lo que me has dicho, y ahora no me informa el porqué se está formando el error (a diferencia del otro) pero cuando inserto una extensión no valida o que no existe, este me salta a la linea del IF y la subraya en amarillo.
¿Por qué crees que se puede estar formando este error? ¿Conoces alguna solución para esto?
Muchas gracias por ser tan paciente, me estas ayudando mucho. Aunque aún no hayamos conseguido soluciornalo del todo. Agradezco que colabores conmigo.
Saludos
Dale a F5, tecla de función, y me dices que pone.
Ahora mismo no lo puedo mirar, mañana a primera hora lo mirare y te informo.
Saludos
Me dice lo siguiente:
- Se ha producido el error '2427' en tiempo de ejecución. Introdujo una expresión que no tiene valor.
Aquí te pego el trozo de código para que te sea más fácil ayudarme:
Private Sub Form_Load()
   Me.Comando41.Visible = False
   Me.Comando42.Visible = False
   Me.Comando43.Visible = False
       If Me.Model_Tlf = "" Or IsNull(Model_Tlf) Or Me.Model_Tlf < 0 Then
            MsgBox "Debe introducir una extensión valida, número mayor que cero", vbCritical, "Error de extensión"
       Else
            Select Case (Me.Model_Tlf)
                Case (4018):
                Me.Comando41.Visible = True
                Case (4028):
                Me.Comando42.Visible = True
                Case (4068):
                Me.Comando43.Visible = True
                Case Else
                MsgBox "El modelo que tiene no es valido a nuestra base de datos",  vbInformation, "Extensión no encontrada"
             End Select
      End If
End Sub
Saludos
Soy tonto, El EVENTO LOAD (Al Cargar) no puede evaluar lo que tiene Me. Model_Tlf ya que desaparece cuando se ha cargado el Formulario, lo que tienes que hacer es evaluar que se ha introducido en Model_Tlf y según la selección, mostrar el control oculto.
En el evento Después de Actualizar de Me. Model_Telf
If Me.Model_Tlf = "" Or IsNull(Model_Tlf) Or Me.Model_Tlf < 0 Then
MsgBox "Debe introducir una extensión valida, número mayor que cero", vbCritical, "Error de extensión"
Else
Select Case (Me.Model_Tlf)
Case (4018):
Me.Comando41.Visible = True
Case (4028):
Me.Comando42.Visible = True
Case (4068):
Me.Comando43.Visible = True
Case Else
MsgBox "El modelo que tiene no es valido a nuestra base de datos", vbInformation, "Extensión no encontrada"
End Select
End If
Un saludo
Ya está!
Muchas gracias por tu ayuda, me ha sido muy útil y ya he aprendido un poco más de Visual Basic =D.
Te plantearé otra duda que tengo, pero para ello abriré otra nueva pregunta.
De nuevo, gracias por todo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas