Protección en VBA

21/02/2005 - 01:51 por pepefras | Informe spam
Tengo una parte del código que elimina las macros de un libro de una sola
hoja, aqui esta:

'Borra las macros
ActiveSheet.Select
Set Modulos = ActiveWorkbook.VBProject.VBComponents
For Each Modulo In Modulos
Select Case Modulo.Type
Case VBExt_ct_StdModule, VBExt_ct_MSForm, _
VBExt_ct_ClassModule
Modulos.Remove Modulo
Case Else
With Modulo.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next
Set Modulos = Nothing

'Continua el código..

todo funciona muy bien y fue gracias al código que me facilitó KL y tambien
ayudó sago (ver exposiciones del 17 y 18-02-05 "Borrar macros"), pero...

de acuerdo con lo indicado por KL en otra exposición del 17-02-05 ("ocultar
contraseña"), protejí el proyecto VBA y por ese motivo no me borra las
macros entonces cero que al código arriba indicado le faltará añadir unas
lineas de desprotección para poder borrar las macros en cuestion.
Agradecido como siempre a vuestra inestimable ayuda.
Pepe Frasquet

Preguntas similare

Leer las respuestas

#6 Héctor Miguel
21/02/2005 - 09:26 | Informe spam
hola, pepe !

No, no, se queda como una hoja de excel sin formulas ni codigo, ni modulos [...]
Es una copia de la plantilla... nombre distinto... queda archivada... se envia por correo electronico.



mi pregunta [mas bien] va 'encaminada' a la posibilidad de NO 'tener que' eliminar modulos/codigos...
[lo que podria 'aligerar' -bastante- las lineas de codigo, incluso, se podria prescindir de las API's]
para lo cual, me gustaria saber si ->en su libro o forma 'original'<-...
-> ¿contiene codigo el modulo de codigo de 'esa/s' hoja/s ? <- ...
o... las macros 'existentes' se ejecutan desde algun/os modulo/s de codigo 'normal/es' -?-

¿comentas?
saludos,
hector.
Respuesta Responder a este mensaje
#7 Aprendiz
21/02/2005 - 13:03 | Informe spam
Hola Héctor, te saludo desde otro pc y contestando a la pregunta, el libro
original tiene 16 hojas con sus correspondientes nombres, entre ellas
Previsión" y "Reporte", y 10 modulos normales con cantidad de macros (+-
25 ), solamente la hoja 2 (Indice) tiene 2 macros en su codigo de hoja, el
resto de hojas no tienen macros, están situadas como te digo en los 10
modulos normales.
Lo que está ocurriendo con el codigo actual que te pasé, es que, primero
graba el libro "plantilla", despues hace una copia de la hoja "Previsión" ó
"Reporte" en un nuevo libro (el libro original desaparece), quita las hojas
que no sirven de ese nuevo libro, quita todos los "shapes, pictures,
botones, etc.." que no interesan, quita tambien los modulos que ha heredado
ese nuevo libro (excepto cuando está protegido el proyecto VBA - !!este es
mi problema!!, despues pide un nombre para archivarlo y un directorio
tambien, y según el caso abre un dialogo para enviar mail y ya está.
Cuando quiero hacer otro reporte vuelvo a abrir la plantilla original y
empezamos de nuevo.
Si no protejo el proyecto VBA no tengo problemas, todo funciona, el problema
es cuando lo protejo y las macros que me has pasado, ya sabes lo que hacen,
supongo que habrá que rectificar poca cosa en esas lineas ¿no crees?
(esto desde mi escaso conocimiento)
Bueno en otro orden de cosas te agradezco sinceramente el tiempo que estás
dedicando a ayudarme.
Si te puedo corresponder de alguna forma me lo dices.p.f.
Desde Valencia (España), recibe mi mayor consideración
Pepe Frasquet



"Héctor Miguel" escribió en el mensaje
news:OaoL97%
hola, pepe !

> No, no, se queda como una hoja de excel sin formulas ni codigo, ni


modulos [...]
> Es una copia de la plantilla... nombre distinto... queda archivada... se


envia por correo electronico.

mi pregunta [mas bien] va 'encaminada' a la posibilidad de NO 'tener que'


eliminar modulos/codigos...
[lo que podria 'aligerar' -bastante- las lineas de codigo, incluso, se


podria prescindir de las API's]
para lo cual, me gustaria saber si ->en su libro o forma 'original'<-...
-> ¿contiene codigo el modulo de codigo de 'esa/s' hoja/s ? <- ...
o... las macros 'existentes' se ejecutan desde algun/os modulo/s de


codigo 'normal/es' -?-

¿comentas?
saludos,
hector.


Respuesta Responder a este mensaje
#8 Héctor Miguel
21/02/2005 - 19:32 | Informe spam
hola, Pepe !

... el libro original tiene 16... entre ellas "Prevision" y "Reporte"... 10 modulos normales con... macros
... solamente la hoja 2 (Indice) tiene 2 macros en su codigo de hoja, el resto de hojas no tienen macros
... el codigo actual... primero graba el libro "plantilla"... en un nuevo libro
... quita las hojas que no sirven... los "shapes, pictures, botones, etc." que no interesan
... los modulos que ha heredado... (excepto cuando esta protegido el proyecto VBA - !!este es mi problema!!
... pide un nombre para archivarlo y un directorio... y segun el caso abre un dialogo para enviar mail y ya esta.
... hacer otro reporte vuelvo a abrir la plantilla original y empezamos de nuevo.
... todo funciona, el problema es cuando lo protejo y las macros que me has pasado, ya sabes lo que hacen
... habra que rectificar poca cosa en esas lineas ¿no crees?...



1.- si la/s hoja/s que te interesa copiar/guardar [en libro nuevo] ->NO tienen codigo en sus modulos 'de clase'<-...
TAMPOCO es 'necesario' eliminar [ningun] modulo ni codigo
puedes copiar la hoja a un libro nuevo con la instruccion -> ThisWorkbook.Worksheets("Previsión").Copy <-
con lo cual, la hoja [prevision] 'se convierte' en un libro nuevo [de una sola hoja] y... ¡ SIN codigo !!!
-> ya no seria necesario eliminar modulos/codigos y puedes 'conservar' la proteccion en el vba <-
[dicho sea 'de paso', sera tambien la hoja 'activa' y el libro 'nuevo' -sin nombre aun- sera el libro 'activo'] ;)
2.- para eliminar los objetos [que supongo son los que tienen asignadas las macros]...
utiliza una instruccion del tipo 'ShapeRange' y eliminalos 'en un solo paso' [omites irlos selecionando p.e.]
[ ... otras lineas de tu codigo ...]
With ActiveSheet.Shapes.Range(Array( _
"Buton 13", "Button 14", "Button 15", "Button 16", "Button 17", _
"Button 18", "Button 19", "Button 21", "Button 22", "Button 23", _
"AutoShape 12", "AutoShape 20")): .Delete
End With

[ ... otras lineas de tu codigo ...]
3.- para solicitar el nombre del nuevo libro [y hoja] podrias 'corregir' los caracteres 'invalidos' [en lugar de 'terminar']
4.- para solicitar el directorio podrias sustituir las API's [p.e.] por dialogos incorporados
5.- hay algunas otras 'cosillas' que podrias sustituir para 'adelgazar/optimizar' el codigo y 'eficientar' las macros ;)

espero que los 'tips' anteriores te sean de utilidad y...
si necesias ayuda adicional... ¿comentas?
saludos,
hector.
Respuesta Responder a este mensaje
#9 pepefras
21/02/2005 - 19:41 | Informe spam
Gracias Héctor todo lo que me dices es de gran utilidad y experiencia para
mí. Asi es que te lo agradezco un montón.
Hasta la próxima. Saludos
Pepe Frasquet



"Héctor Miguel" escribió en el mensaje
news:
hola, Pepe !

... el libro original tiene 16... entre ellas "Prevision" y "Reporte"...
10 modulos normales con... macros
... solamente la hoja 2 (Indice) tiene 2 macros en su codigo de hoja, el
resto de hojas no tienen macros
... el codigo actual... primero graba el libro "plantilla"... en un nuevo
libro
... quita las hojas que no sirven... los "shapes, pictures, botones,
etc." que no interesan
... los modulos que ha heredado... (excepto cuando esta protegido el
proyecto VBA - !!este es mi problema!!
... pide un nombre para archivarlo y un directorio... y segun el caso
abre un dialogo para enviar mail y ya esta.
... hacer otro reporte vuelvo a abrir la plantilla original y empezamos
de nuevo.
... todo funciona, el problema es cuando lo protejo y las macros que me
has pasado, ya sabes lo que hacen
... habra que rectificar poca cosa en esas lineas ¿no crees?...



1.- si la/s hoja/s que te interesa copiar/guardar [en libro nuevo] ->NO
tienen codigo en sus modulos 'de clase'<-...
TAMPOCO es 'necesario' eliminar [ningun] modulo ni codigo
puedes copiar la hoja a un libro nuevo con la instruccion ->
ThisWorkbook.Worksheets("Previsión").Copy <-
con lo cual, la hoja [prevision] 'se convierte' en un libro nuevo [de
una sola hoja] y... ¡ SIN codigo !!!
-> ya no seria necesario eliminar modulos/codigos y puedes 'conservar'
la proteccion en el vba <-
[dicho sea 'de paso', sera tambien la hoja 'activa' y el libro
'nuevo' -sin nombre aun- sera el libro 'activo'] ;)
2.- para eliminar los objetos [que supongo son los que tienen asignadas
las macros]...
utiliza una instruccion del tipo 'ShapeRange' y eliminalos 'en un solo
paso' [omites irlos selecionando p.e.]
[ ... otras lineas de tu codigo ...]
With ActiveSheet.Shapes.Range(Array( _
"Buton 13", "Button 14", "Button 15", "Button 16", "Button 17", _
"Button 18", "Button 19", "Button 21", "Button 22", "Button 23", _
"AutoShape 12", "AutoShape 20")): .Delete
End With

[ ... otras lineas de tu codigo ...]
3.- para solicitar el nombre del nuevo libro [y hoja] podrias 'corregir'
los caracteres 'invalidos' [en lugar de 'terminar']
4.- para solicitar el directorio podrias sustituir las API's [p.e.] por
dialogos incorporados
5.- hay algunas otras 'cosillas' que podrias sustituir para
'adelgazar/optimizar' el codigo y 'eficientar' las macros ;)

espero que los 'tips' anteriores te sean de utilidad y...
si necesias ayuda adicional... ¿comentas?
saludos,
hector.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida