żsabeis si hay alguna forma via codigo de proteger/desproteger nuestro
propio pryecto, por supuesto teniendo la clave, y/o desde dentro de el
propio proyecto?
no he conseguido encontrar ningun metodo al respecto (algo parecido al
protect/unprotect de workbook) y he pensado que quizas con sendkeys, pero no
lo tengo muy claro.
y, en su defecto, żcomo podria importar componentes vb desde un proyecto
protegido, si es que es posible (de momento no lo he conseguido)?
como siempre, gracias de antemano
un saludo y hasta pronto
Ivan
> sabeis si hay alguna forma via codigo de proteger/desproteger nuestro propio pryecto
> por supuesto teniendo la clave, y/o desde dentro de el propio proyecto?
> no he conseguido encontrar ningun metodo al respecto (algo parecido al protect/unprotect de workbook)
> y he pensado que quizas con sendkeys, pero no lo tengo muy claro.
> y, en su defecto, como podria importar componentes vb desde un proyecto protegido
> si es que es posible (de momento no lo he conseguido)?
para copiar componentes vb desde un libro protegido [primero] deberas quitarle la proteccion :D
para quitar/poner protecciones al proyecto de macros [hasta donde se]...
1) requiere enviar una secuencia de teclas sendkeys al proyecto de macros...
[por omision] se esta afectando ->al libro activo<- [en la interfase de usuario]
2) [por lo anterior] nos 'tendremos que' asegurar de...
a) abrir el editor vba...
b) cerrar TODA 'instancia' de modulo abierto...
c) cerrar el editor de vba...
d) activar el libro 'apropiado'...
e) enviar la secuencia de teclas, para quitar/poner la [clave de] proteccion del proyecto
3) NO olvidar que, una vez desprotegido un proyecto vba... ->seguira SIN password<- [en la sesion]
aun [re]protegiendolo, sera indispensable cerrarlo y abrirlo de nuevo para que 'se active' la [re]proteccion
ejemplos del procedimiento anterior... [en un modulo de codigo estandar/general/normal/...]:
Sub Quitar_PassWord_VBA()
Application.SendKeys "%{f11}{l 4}%q", True
Workbooks("Libro X").Activate
Application.SendKeys "%{f11}^r{down}AquiTuPassWoRd~%q", True
End Sub
Sub Poner_PassWord_VBA()
Workbooks("Libro X").Activate
Application.SendKeys "%{f11}^r%hp^{pgdn}{+}{tab}AquiTuPassWoRd{tab}AquiTuPassWoRd~%q"
Workbooks("Libro X").Close True
End Sub
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
la verdad es que acabo de encontrar tu (misma +o-) respuesta a otros
usuarios con el buscador del foro (creo que voy a tener que echarle un
poco mas de paciencia a las busquedas antes de consultar)
en cuanto a la segunda parte de la consulta ->
>>¿como podria importar componentes vb desde un proyecto
protegido,<<
si tienes tiempo, me podrias comentar si es posible modificar/añadir/
eliminar codigo/componentes de un proyecto protegido con codigo
contenido en el propio proyecto sin tener que desprotegerlo. Me da la
impresion de que no (al menos via sencilla) pero lo mismo hay algun
truco
bueno, de nuevo muchas gracias
> en cuanto a la segunda parte de la consulta ->
> >>como podria importar componentes vb desde un proyecto protegido,<<
> ... comentar si es posible modificar/a#adir/ eliminar codigo/componentes
> de un proyecto protegido con codigo contenido en el propio proyecto sin tener que desprotegerlo.
> Me da la impresion de que no (al menos via sencilla) pero lo mismo hay algun truco
me temo que no hay 'truco posible' [sobre todo en versiones 'recientes'] :-((
Is Access to the VB Project Allowed?
http://j-walk.com/ss/excel/tips/tip96.htm
Programming To The Visual Basic Editor
http://www.cpearson.com/excel/vbe.htm
por lo que se ve, parece que no hay mas remedio que des/reproteger el
proyecto, o olvidarse de esta vía. El problema es sobre todo a la hora de
posibles actualizaciones del archivo con cambios 'operativo'. Supongo que el
proveer de un certificado reconocido por el equipo receptor no influye en
este punto (tampoco sabría como hacerlo)
visto lo visto, he estado probando los códigos con sendkeys, y parecen
funcionar bien, pero me han surgido varias 'sor...presas'. Si tienes tiempo
te comento/consulto varias de las 'cosillas' que de momento me han ocurrido:
1º.- por un lado, al ejecutar Sub Quitar_PassWord_VBA(), la macro parece
ejecutarse bien al ejecutarla desde la interfaz de excel (que al fin y al
cabo es su cometido) y desprotege el proyecto,
lo curioso (para mi ) viene al probar las macros desde el editor de vba
(parece claro que alt+f11 en este caso invierte el destino) veo que escribe
4 palotes (creo que) en el punto donde esta activo el cursor en el momento
de ejecutarse, a veces en una celda, a veces dentro de un modulo, incluso a
veces escribe también la contraseña en otra celda.
a primera vista y tras algunas pruebas despiezando el código, supongo que la
causante es esta parte -> {1 4}, que imagino, por tu orden expuesto que es
la encargada de -> b) cerrar TODA 'instancia' de modulo abierto...
aunque no creo que suponga ningún problema, pues como te comento, lo suyo es
que estas modificaciones se produzcan por alguna acción desde al interface
de excel o un formulario, pero, ¿podrías explicarme como funciona/que hace
exactamente dicha combinación de teclas?
2º.- en cuanto a -> Sub Poner_PassWord_VBA(), también funciona bien,
de hecho le he añadido una instrucción al final para volver a abrir el libro
ya protegido de nuevo y lo así lo hace,
aunque, y aquí aparece la curiosidad de nuevo al ejecutar desde el editor de
vb, en este caso me presenta un cuadro de dialogo preguntándome si quiero
proteger 'algo' (en una ocasión la hoja y/o rangos, el resto el libro)
aquí también es valido lo de la interface de excel, pero, como curiosidad,
¿podrías explicarme la causa, que supongo esta relacionada con el destino de
la combinación de teclas?
3º.- y por ultimo ¿como puede afectar el posible uso del teclado mientras se
esta ejecutando sendkeys?¿se podría usar algo parecido a la propiedad
interactive (supongo que esta también inhabilita sendkeys < se me acaba de
ocurrir y no lo he probado>) para evitar la posible interferencia del
usuario o...?
bueno, disculpa el rollo y si puedes echarme una mano una vez mas, te lo
agradezco (y si no también)
> ... probando... sendkeys... me han surgido varias 'sor...presas'...
> 1... al ejecutar Sub Quitar_PassWord_VBA(), la macro parece ejecutarse bien... desde la interfaz de excel
> (que al fin y al cabo es su cometido) y desprotege el proyecto,
> lo curioso (para mi ) viene al probar las macros desde el editor de vba [...]
1) ya lo dijiste... -> "... ejecutarse... desde la interfaz de excel (que al fin y al cabo es su cometido)..." :))
> como puede afectar el posible uso del teclado mientras se esta ejecutando sendkeys?
> se podría usar algo parecido a la propiedad > interactive (supongo que esta también inhabilita sendkeys <
> se me acaba de ocurrir y no lo he probado>) para evitar la posible interferencia del usuario o...?
2) me espero a que 'corras pruebas' :))
3) hablando de 'que' hacen [+/- exactemente] los 'teclazos' del mismo metodo 'sendkeys'...
1) nos aseguramos que ->NINGUNA<- ventana de codigo este 'abierta' <= OJO
usamos un [primer] 'sendkeys' para...
a) abrir el editor de vba con => {Alt}+{F11} = %{f11}
b) cerrar [por si las dudas] toda instancia de modulo abierto con => 4 'flechas izquierda' = {L 4}
c) cerramos el editor de vba [para poder 'activar' en excel el libro que nos interesa] con => {Alt}+Q = %q
=> el primer 'sendkeys' nos queda +/- asi: Application.SendKeys "%{f11}{l 4}%q", True
2) [habiendo 'regresado' a excel] ->activamos<- el libro cuyo proyecto vba se va a desproteger
Workbooks("Libro fulano").Activate
3) 'mandamos' la segunda sentencia 'sendkeys' para...
a) abrir el editor de vba con => {Alt}+{F11} = %{f11}
b) 'activar' el explorador de proyectos con => {Ctrl}+R = ^r
c) 'pulsamos' => una flecha para abajo = {down}
[al 'tratar' de expandir un proyecto bloqueado 'lanza' automaticamente la solicitud por el password] :))
d) 'enviamos' el password 'seguido' de la tecla {enter} con => x_password~
d) [opcionalmente] 'cerramos' el editor de vba con => {Alt}+Q = %q
=> el segundo 'sendkeys' nos queda +/- asi: Application.SendKeys "%{f11}^r{down}x_password~%q"
en lo que se refiere al cuadro de dialogo proteger hoja/libro creo que ya lo
he visto siguiendo la secuencia de teclas, pero respecto a {1 4} sigo sin
verlo claro, sobre todo lo que hace en el editor
> ... respecto a {1 4} sigo sin verlo claro, sobre todo lo que hace en el editor...
[haz la siguiente prueba teniendo un libro 'norma' como activo]:
1) pulsa {Alt}+{F1} o... abre el editor de vba
2) pulsa {Ctrl}+R o... activa el explorador de proyectos
3) pulsa 4 veces la flecha izquierda <= se habra cerrado toda instancia de modulo abierto :))
-> tambien puedes probar el codigo 'omitiendo' dicha secuencia de teclas...
[habra alguna ocasion donde podria presentar 'errores'] :-((
en serio, muchas gracias de nuevo por la explicación.
en cuanto a {l 4}, me había obcecado en que era {1<uno> 4}, y me estaba
mareando. De todas formas no sabia que left (y supongo que rigth, down, up,
y....) se podía usar así para indicarle la cantidad de 'teclazos'. Otra 'pa'
la saca, gracias.
respecto a la posible 'interactividad', con el teclado, ya te comentare
cuando vaya probando si me surgen dudas/problemas
muchas gracias de nuevo y un saludo
Ivan
lo echo a la saca
muchas gracias y un saludo
Ivan