Imprimir página | Cerrar ventana

Duda simple con InputBox

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84891
Fecha de impresión: 27/Marzo/2026 a las 04:08


Tema: Duda simple con InputBox
Publicado por: Nakku
Asunto: Duda simple con InputBox
Fecha de publicación: 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!



Respuestas:
Publicado por: rokoko
Fecha de publicación: 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. 


Publicado por: xavi
Fecha de publicación: 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

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: Nakku
Fecha de publicación: 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.


Publicado por: xavi
Fecha de publicación: 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

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: Nakku
Fecha de publicación: 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!


Publicado por: AnSanVal
Fecha de publicación: 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.


Publicado por: Nakku
Fecha de publicación: 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.



Imprimir página | Cerrar ventana