Juego del laúd

Hola!
Para aprender a tocar el laúd y memorizar sus notas me vendría muy bien una especie de juego.
El laúd tiene 6 cuerdas dobles y 19 trastes.Puden corresponder a 6 columnas y 19 filas de excel y por tanto 114 celdas con cada nota correspondiente.
El juego puede ser el siguiente con las variaciones que usted crea :
1.Al empezar el cursor se sitúa aleatoriamente en una de las 114 celdas que estarán en blanco de una tabla de 6 columnas y 19 filas
2.Si yo escribo la nota correcta y puso enter: se borra todo y el cursor pasa a otra celda aleatoriamente.
3.Si no escribo bien la nota:marca error y vuelve a quedarse en blanco y el cursor en otra celda para volver a empezar.
   A B C D E F
...
1 Sol# Do# Fa# Si Mi La
2 La Re Sol Do Fa La#
3   La#      Re#              Sol#           Do#           Fa#             Si
Así hasta la fila 19.
Muy parecido valdría para la guitarra.
Yo no tengo ni idea de cómo hacerlo y tampoco sé si es una pregunta de muy complicada solución .
Pero le estaría muy agradecido si intentara ayudarme.
Un saludo

1 respuesta

Respuesta
1
Esta macro hace lo que necesitas la debes pegar en el visual de la hoja 1, pero debes considerar lo siguiente:
1) El juego por así llamarlo funciona en la hoja 1 desde la A1 hasta F19
2) Debes primero escribir en la hoja 2 todas las notas en la misma dirección que si la escribieras en la hoja 1(Así las valida)
Y Listo, cualquier duda me avisas
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row > 0 And Target.Row < 19 And Target.Column > 0 And Target.Column < 7 Then
a = Target.Address
On Error GoTo Indice
If Sheets("Hoja1").Range(a).Value = Sheets("Hoja2").Range(a).Value Then
Randomize
fila_inicial = 1
fila_final = 19
columna_inicial = 1
columna_final = 6
fila_elegida = Int((fila_final - fila_inicial + 1) * Rnd + fila_inicial)
columna_elegida = Int((columna_final - columna_inicial + 1) * Rnd + columna_inicial)
Cells(fila_elegida, columna_elegida).Select
Else
MsgBox "Nota Incorrecta"
Range("A1:F19").Select
Selection.ClearContents
Randomize
fila_inicial = 1
fila_final = 19
columna_inicial = 1
columna_final = 6
fila_elegida = Int((fila_final - fila_inicial + 1) * Rnd + fila_inicial)
columna_elegida = Int((columna_final - columna_inicial + 1) * Rnd + columna_inicial)
Cells(fila_elegida, columna_elegida).Select
End If
End If
Indice:
If Err.Number <> 0 Then
End If
End Sub
Muchísimas gracias por tu pronta respuesta lo he probado y funciona muy bien. Sólo si pudieses hacer una pequeña modificación ya quedaba genial.
Cuando llego a la última fila y acierto se queda escrito, no se borra y el cursor se sale de la tabla. Tengo que pinchar dentro y fallar para que cuando le de al botón del error se borra todo y devuelve aleatoriamente el cursor a la tabla.
Esto se solucionaría si cada vez que acertase saliese también un botón diciendo que había acertado y al pulsarlo se borrase todo y devolviese el cursor aleatoriamente a la tabla como sucede cuando hay error.
Si lo ves muy complicado así como me lo has enviado ya me sirve.
Saludos con todo mi agradecimiento.
Pues mira lo que podrías hacer es incluir un botón para iniciar de nuevo, porque lo veo complicado hacer un contar para verificar si todo esta lleno, aunque sería interesante hacerlo. En todo caso estoy liado de tiempo por lo que no lo voy a hacer.
Al botón de inicio le asignas la siguiente macro y listo:
Sub Inicio()
On Error GoTo Indice
Range("A1:F19").Select
Selection.ClearContents
Randomize
fila_inicial = 1
fila_final = 19
columna_inicial = 1
columna_final = 6
fila_elegida = Int((fila_final - fila_inicial + 1) * Rnd + fila_inicial)
columna_elegida = Int((columna_final - columna_inicial + 1) * Rnd + columna_inicial)
Cells(fila_elegida, columna_elegida).Select
Indice:
If Err.Number <> 0 Then
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas