Macro que al ser ejecutada primero me pida una contraseña y si acierto ejecuta la macro y sino envía mensaje

Me gustaría poder tener una macro sencilla que haga lo siguiente:

Tengo un libro habilitado para macros y en él tengo 2 hojas, una hoja llamada "Factura" y otra hoja llamada "Constantes"

En la hoja "Constantes" en la columna "AA" tengo desde la fila 1 en adelante códigos alfanuméricos como por ejemplo: "Xw75RT23" sin repetir aleatorios que combinan mayúsculas, minúsculas y números.

Entonces deseo una macro (Macro1) que cuando yo le de click en el botón para ejecutar, lo primero que haga es pedirme un código, a través de un inputbox, cuando yo le escriba el código y le de siguiente, entonces el revise si ese código que puse está dentro de las opciones de la columna "AA" de la hoja "Constantes" desde la fila 1 hasta el final. Si si está, entonces la macro (Macro1) ejecuta ahí si la macro siguiente (Macro2), pero en caso de que él código no se encuentre dentro de las posibilidades de la columna "AA" de la hoja "Constantes" entonces salga un msgbox donde diga que "El código de Acceso que has intruducido es erróneo, por favor intentalo más tarde." y finaliza la macro sin ejecutar la Macro2.

Respuesta
1

Prueba lo siguiente:

Sub Macro1()
  Dim cod As Variant, f As Range
  cod = Application.InputBox("Entra el código")
  If cod = "" Or cod = False Then Exit Sub
  Set f = Sheets("Constantes").Range("A:A").Find(cod, , xlValues, xlWhole, , , False)
  If Not f Is Nothing Then
    Call macro2
  Else
    MsgBox "El código de Acceso que has intruducido es erróneo, por favor intentalo más tarde."
  End If
End Sub

Que pena se le olvido incluirle algo suprepamente importante.
Se me olvido decirte que cuando la macro identifique que el código ingresado esta contenido en la columna "A", ejecute la macro, pero ese código que ya fue utilizado se debe borrar del listado de la columna "A" sin dejar ese espacio en blanco sino desplazando las demás celdas hacia arriba de esa columna.

La idea de que el código sea borrado es para que solo pueda ser utilizado esa vez, al ser borrado del listado, ya no podrá volver a ser utilizado.

Prueba así:

Sub Macro1()
  Dim cod As Variant, f As Range
  cod = Application.InputBox("Entra el código")
  If cod = "" Or cod = False Then Exit Sub
  Set f = Sheets("Constantes").Range("A:A").Find(cod, , xlValues, xlWhole, , , False)
  If Not f Is Nothing Then
    Call macro2
    f.EntireRow.Delete
  Else
    MsgBox "El código de Acceso que has intruducido es erróneo, por favor intentalo más tarde."
  End If
End Sub

Gracias.

Pero quisiera hacer la ultima pregunta por si eso tiene arreglo.
Lo que sucede es que al colocar la instrucción

f.EntireRow.Delete

El borra toda la fila y no solo la celda, entonces me borra datos que estan en esa misma fila en otras columnas que no quiero borrar,. Entonces por eso quisiera saber si hay manera de solo borrar la celda y desplazar las restantes hacia arriba, sin borrar toda la fila para evitar borrar otros datos de otras columnas.

Cambia

f.EntireRow.Delete

Por:

f.Delete xlUp

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas