como diseño un formulario que me deje ejecutar una macro

27/10/2005 - 21:11 por Isaac García | Informe spam
necesito generar un formulario que al llamarlo me solicite una clave de
acceso, y que si es verdadero la ejecute y si no, solo mande un mensaje.
Saludos Ygracias


ISaac

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
28/10/2005 - 06:59 | Informe spam
hola, Isaac !

necesito generar un formulario que al llamarlo me solicite una clave de acceso
y que si es verdadero la ejecute y si no, solo mande un mensaje



la forma mas 'delgada' [menos lineas de codigo] que se me ocurre, es:
utilizando SOLO un control de cuadro de texto en el formulario y que el usuario presione 'enter' al terminar.

te paso los pasos y, si cualquier duda... comentas?
saludos,
hector.
== estando activo 'el libro en cuestion' ... =1.- ingresa al editor de vba -> atajo de teclado = alt+f11
2.- [menu] insertar / userform
3.- agrega un control 'cuadro de texto'
4.- click-derecho sobre el control y selecciona -> 'propiedades'
doble-click sobre la propiedad 'passwordchar' e introduce [p.e.] un asterisco '*'
5.- click-derecho sobre el control y selecciona -> 'ver codigo...'
6.- elimina TODA linea de codigo que aparezca en el modulo de codigo y...
-> copia/pega las siguientes lineas en dicho modulo... <-
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If TextBox1 = "PoN aqUi tU cLavE" Then Macro_a_ejecutar Else MsgBox "Clave equivocada !!!"
End Sub

solo toma en cuenta que la comparacion de textos en vba -generalmente- debe ser 'exacta' [mayusculas/minusculas]
Respuesta Responder a este mensaje
#2 Marta
13/12/2005 - 11:19 | Informe spam
Hola a todos,

Héctor Miguel, me ha resultado interesante tu respuesta.

Siguiendo ese razonamiento, cómo se haría lo siguiente?:

- El cuadro de texto te pide una contraseña, y según qué contraseña
introduzcas, ejecuta una macro u otra.
Es decir, si como contraseña pongo A, me ejecuta la macro A, si pongo B, la
macro B, etc... así hasta 6 posibles contraseñas con 6 distintas macros.
¿Se puede?

Muchas gracias

"Héctor Miguel" escribió:

hola, Isaac !

> necesito generar un formulario que al llamarlo me solicite una clave de acceso
> y que si es verdadero la ejecute y si no, solo mande un mensaje

la forma mas 'delgada' [menos lineas de codigo] que se me ocurre, es:
utilizando SOLO un control de cuadro de texto en el formulario y que el usuario presione 'enter' al terminar.

te paso los pasos y, si cualquier duda... comentas?
saludos,
hector.
== estando activo 'el libro en cuestion' ... => 1.- ingresa al editor de vba -> atajo de teclado = alt+f11
2.- [menu] insertar / userform
3.- agrega un control 'cuadro de texto'
4.- click-derecho sobre el control y selecciona -> 'propiedades'
doble-click sobre la propiedad 'passwordchar' e introduce [p.e.] un asterisco '*'
5.- click-derecho sobre el control y selecciona -> 'ver codigo...'
6.- elimina TODA linea de codigo que aparezca en el modulo de codigo y...
-> copia/pega las siguientes lineas en dicho modulo... <-
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If TextBox1 = "PoN aqUi tU cLavE" Then Macro_a_ejecutar Else MsgBox "Clave equivocada !!!"
End Sub

solo toma en cuenta que la comparacion de textos en vba -generalmente- debe ser 'exacta' [mayusculas/minusculas]



Respuesta Responder a este mensaje
#3 Héctor Miguel
13/12/2005 - 20:38 | Informe spam
hola, Marta !

... me ha resultado interesante... Siguiendo ese razonamiento, como se haria lo siguiente?:
- El cuadro de texto te pide una contrase#a, y segun que contrase#a introduzcas, ejecuta una macro u otra.
... si como contrase#a pongo A, me ejecuta la macro A, si pongo B, la macro B, etc... asi hasta 6 posibles...



una alternativa...
en el modulo de codigo del formulario ==Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Select Case LCase(TextBox1)
Case "macro1", "macro2", "macro3", "macro4", "macro5", "macro6"
Application.Run TextBox1
Case Else: MsgBox "Clave NO reconocida !!!"
End Select
End Sub

las expresiones de texto del -> Case "macro1", "macro2", "macro3", "macro4", "macro5", "macro6"
deben coincidir con los nombres de 'las macros'
-> [solo] recuerda que no se 'permiten' espacios en los nombres de macros ;)
y algunos 'ciertos nombres'... podrian ocasionar 'conflictos' :-(

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 Marta
14/12/2005 - 11:36 | Informe spam
Hola Héctor!

Muchas gracias, pinta bien.

Solo una preguntilla absurda... hago exactamente lo que comentas, pero...
¿en qué lugar especifico cuál es la contraseña que corresponde a cada macro?

Lo que he puesto en el código del textbox es:

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)
If KeyCode = vbKeyReturn Then Unload Me
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Select Case LCase(TextBox1)
Case "Spend_Albert", "Spend_Celia", "Spend_Elisa", "Spend_Javier",
"Spend_Noelia", "Spend_Sergio"
Application.Run TextBox1
Case Else: MsgBox "Clave NO reconocida !!!"
End Select
End Sub

En Case, lo que ves es el nombre de cada una de las macros.

Guardo y abro después el Excel y al saltar la caja, meta lo que meta me sale
"Clave NO reconocida !!!".
¿Dónde tengo que poner cuáles son las contraseñas que permiten la ejecución
de las macros?.
En Propiedades de TextBox1, en PasswordChar he marcado *.

Muchas gracias por todo,

Marta

"Héctor Miguel" escribió:

hola, Marta !

> ... me ha resultado interesante... Siguiendo ese razonamiento, como se haria lo siguiente?:
> - El cuadro de texto te pide una contrase#a, y segun que contrase#a introduzcas, ejecuta una macro u otra.
>... si como contrase#a pongo A, me ejecuta la macro A, si pongo B, la macro B, etc... asi hasta 6 posibles...

una alternativa...
en el modulo de codigo del formulario ==> Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Select Case LCase(TextBox1)
Case "macro1", "macro2", "macro3", "macro4", "macro5", "macro6"
Application.Run TextBox1
Case Else: MsgBox "Clave NO reconocida !!!"
End Select
End Sub

las expresiones de texto del -> Case "macro1", "macro2", "macro3", "macro4", "macro5", "macro6"
deben coincidir con los nombres de 'las macros'
-> [solo] recuerda que no se 'permiten' espacios en los nombres de macros ;)
y algunos 'ciertos nombres'... podrian ocasionar 'conflictos' :-(

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.



Respuesta Responder a este mensaje
#5 Héctor Miguel
14/12/2005 - 17:47 | Informe spam
hola, Marta !

Solo una preguntilla... hago exactamente lo que comentas, pero...
en que lugar especifico cual es la contrase#a que corresponde a cada macro?



1) para el caso del ejemplo, la contrase#a 'equivale' al nombre de la macro [tal como lo describes] ;)
2) solo comentarte que en vba, las comparaciones de texto son... 'textuales' [mayusculas/minusculas]
[a menos que al inicio del modulo pongas 'Option Compare Text', o lo 'manejes' a nivel de procedimiento]
3) yo habia pensado en 'proteger/prevenir/corregir/...' si el usuario introduce la clave a veces en may/min/combinada :))
y la comparacion en el codigo la estoy 'forzando' a comparar solo en minusculas con la instruccion:
-> Select Case LCase(TextBox1)... y en 'el Case' los textos/macros -> en minusculas

-> si deseas que la comparacion sea 'exacta' a los 'Case "Spend_Albert", "Spend_Celia", "Spend_Elisa", [etc.]
solo elimina de la linea 'Select' la funcion 'LCase'...
de -> Select Case LCase(TextBox1)
a -> Select Case TextBox1

saludos,
hector.
==> Lo que he puesto en el codigo del textbox es:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Select Case LCase(TextBox1)
Case "Spend_Albert", "Spend_Celia", "Spend_Elisa", "Spend_Javier", "Spend_Noelia", "Spend_Sergio"
Application.Run TextBox1
Case Else: MsgBox "Clave NO reconocida !!!"
End Select
End Sub
En Case, lo que ves es el nombre de cada una de las macros.
Guardo y abro despues el Excel y al saltar la caja, meta lo que meta me sale "Clave NO reconocida !!!".
Donde tengo que poner cuales son las contrase#as que permiten la ejecucion de las macros?.
En Propiedades de TextBox1, en PasswordChar he marcado *.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida