** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Duda simple con InputBox
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoDuda simple con InputBox

 Responder Responder
Autor
Mensaje
Nakku Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 13/Diciembre/2019
Localización: España
Estado: Sin conexión
Puntos: 7
Enlace directo a este mensaje Tema: Duda simple con InputBox
    Enviado: 13/Diciembre/2019 a las 19:24
Hola buenas! Llevo unos meses con vba por lo que mi nivel es bastante bajo y me ha surgido el siguiente problema con este código:

Pregunta = InputBox("Quien es mas alto" & Chr(13) & "A.Prueba1" & Chr(13) & "B.Prueba2")
If UCase(Pregunta) = A Then
    Msgbox ("Correcto")
    Else
    Msgbox ("Fallido")
End If

Lo que pretendo es que en caso de que la respuesta insertada en el InputBox sea la primera, la A, salga un MsgBox y en caso contrario, otro MsgBox diciendo otra cosa, pero aun que introduzca la A me da Fallido (MsgBox en caso de que no sea A la respuesta) y no acabo de entender el porque.

Muchas gracias!
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3071
Enlace directo a este mensaje Enviado: 13/Diciembre/2019 a las 19:45
If UCase(pregunta) = "A" Then

Es una buena costumbre declarar la variable


Dim pregunta As String
pregunta = InputBox("Quien es mas alto" & Chr(13) & "A.Prueba1" & Chr(13) & "B.Prueba2")
If UCase(pregunta) = "A" Then
    MsgBox ("Correcto")
    Else
    MsgBox ("Fallido")
End If


Al ser  letras siempre tiene que ir entre comillas dobles

String es una variable de texto. 


Editado por rokoko - 13/Diciembre/2019 a las 19:52
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Enlace directo a este mensaje Enviado: 13/Diciembre/2019 a las 20:27
Como dice rokoko, es un buena costumbre declarara las variables. 

Si, en las opciones del editor de VBA de Access, marcas "Requerir declaración de variable" cada nuevo objeto (formulario, informe, módulo) incorporará la línea Option Explicit arriba de todo de manera que no podrás utilizar variables no declaradas.

Si lo hubieras tenido así, probablemente ya habrías recibido un mensaje de error que te habría indicado cual es tu fallo: variable A no declarada.

Un saludo  
Xavi, un minyó de Terrassa

Mi web
Arriba
Nakku Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 13/Diciembre/2019
Localización: España
Estado: Sin conexión
Puntos: 7
Enlace directo a este mensaje Enviado: 13/Diciembre/2019 a las 20:44
Publicado originalmente por rokoko rokoko escribió:

If UCase(pregunta) = "A" Then

Es una buena costumbre declarar la variable


Dim pregunta As String
pregunta = InputBox("Quien es mas alto" & Chr(13) & "A.Prueba1" & Chr(13) & "B.Prueba2")
If UCase(pregunta) = "A" Then
    MsgBox ("Correcto")
    Else
    MsgBox ("Fallido")
End If


Al ser  letras siempre tiene que ir entre comillas dobles

String es una variable de texto. 
Publicado originalmente por xavi xavi escribió:

Como dice rokoko, es un buena costumbre declarara las variables. 

Si, en las opciones del editor de VBA de Access, marcas "Requerir declaración de variable" cada nuevo objeto (formulario, informe, módulo) incorporará la línea Option Explicit arriba de todo de manera que no podrás utilizar variables no declaradas.

Si lo hubieras tenido así, probablemente ya habrías recibido un mensaje de error que te habría indicado cual es tu fallo: variable A no declarada.

Un saludo  


Gracias a los dos por el consejo, y lo tendre en cuenta jaja, como digo aun soy novatillo, al final lo conseguí arreglar despues de mirarmelo un par de veces jaja, el problema lo tengo cuando quiero aplicarlo de manera más compleja, en este caso hago lo siguiente:

Correcto = Sheets("Preguntas").Range("E" & Fila) 'ya que tengo las preguntas en otra hoja en este caso, y hago lo siguiente, en la hoja donde quiero aplicar el InputBox y tal:

If PosJ1 = 4 Then
    Resp = InputBox(Pregunta & Chr(13) & "A. " & RespA & Chr(13) & "B. " & RespB & Chr(13) & "C. " & RespC)
    If UCase(Resp) = Correcto Then
        MsgBox ("Correcto!")
      Else
        MsgBox ("Seguro?")
    End If
End If

He probado a poner el .Value al final de la variable ''Correcto'' y tampoco, entonces, se que si yo pongo que UCase(Resp)="La respuesta que sea" me hace bien el codigo, pero de esta forma me salta directamente al Else y no acabo de entender el porque si la variable esta bien (o eso creo)...

Perdón por el tocho y por la pésima explicación, y muchas gracias, de verdad!
Un abrazo.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Enlace directo a este mensaje Enviado: 13/Diciembre/2019 a las 21:09
¿Has verificado que la variable "Correcto" contiene la respuesta correcta?
Prueba poniendo un punto de interrupción en la primera linea de código y ejecuta paso a paso para evaluar en cada linea las diferentes variables, valores y condiciones.

A lo mejor encuentras espacios o cosas raras que hacen que la igualdad no se cumpla

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
Nakku Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 13/Diciembre/2019
Localización: España
Estado: Sin conexión
Puntos: 7
Enlace directo a este mensaje Enviado: 13/Diciembre/2019 a las 21:35
Publicado originalmente por xavi xavi escribió:

¿Has verificado que la variable "Correcto" contiene la respuesta correcta?
Prueba poniendo un punto de interrupción en la primera linea de código y ejecuta paso a paso para evaluar en cada linea las diferentes variables, valores y condiciones.

A lo mejor encuentras espacios o cosas raras que hacen que la igualdad no se cumpla

Un saludo


Si, lo he comprobado, de hecho, al ejecutar la macro paso por paso se cumple el UCase(Resp)=Correcto, pero aun así salta al Else nose porque.

Un saludo!
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5990
Enlace directo a este mensaje Enviado: 14/Diciembre/2019 a las 19:29
Afirmar que «... se cumple el UCase(Resp)=Correcto...» y decir a continuación «...  pero aun así salta al Else…», ¡No tiene sentido! Precisamente la confirmación de que se cumple es cuando NO salta al Else. 

En una de tus pruebas ¿Que valor tiene Resp y que valor tiene Correcto?.


Saludos desde Tenerife.
Arriba
Nakku Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 13/Diciembre/2019
Localización: España
Estado: Sin conexión
Puntos: 7
Enlace directo a este mensaje Enviado: 14/Diciembre/2019 a las 21:09
Publicado originalmente por AnSanVal AnSanVal escribió:

Afirmar que «... se cumple el UCase(Resp)=Correcto...» y decir a continuación «...  pero aun así salta al Else…», ¡No tiene sentido! Precisamente la confirmación de que se cumple es cuando NO salta al Else. 

En una de tus pruebas ¿Que valor tiene Resp y que valor tiene Correcto?.




Sisi, se que no tiene sentido, pero de verdad que cuando miraba paso por paso el codigo salia UCase(Resp)(Valor:Respuesta)=Correcto(Valor:Respuesta) y aun así me saltaba al Else, por eso no entendia lo que pasaba!

Y hoy, tras cambiar los Range por Cells, nose porque, ya me ha funcionado todo a la perfección.

Muchas gracias a todos por las respuestas!
Un Abrazo.


Editado por Nakku - 14/Diciembre/2019 a las 21:10
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable