Macro para AUTOBORRADO

Miguelsp

New Member
Joined
Apr 23, 2003
Messages
48
Hola

como parte de la seguridad de un documento querría que borrase (y salvase los cambios para que quedase borrado siempre) el contenido de todo el libro si se diesen la condicion siguiente:

Que en la celda A324 no ponga MSP

la razón para que salve cambios automaticamente es que no se pueda recuperar la infomación borrada.

Podríais ayudarme con la Macro?
 

Excel Facts

What is =ROMAN(40) in Excel?
The Roman numeral for 40 is XL. Bill "MrExcel" Jelen's 40th book was called MrExcel XL.
Algo así:

Sub Macro1()

If Range("A324").Value = "MSP" Then
Range("B2:E11").Select
Selection.ClearContents
ActiveWorkbook.save
End If

End Sub

El rango B2:E11 es el rango que se va a borrar. Obviamente tenés que cambiarlo por el tuyo.

Espero que te sirva.
 
Upvote 0
Miguel,

Lo que Paliman escribió, usted tendría que hacerlo correr a mano. Si usted desea algo automático, entonces usted podría aprovechar del evento de cambio de la hoja. Si usted no ha trabajado con Event Procedures, haz un cliq-derecho sobre la etiqueta de la hoja deseada y del menucito que parece, escoja "View Code" y copy and paste el código abajo. Puse el mismo rango para borrar que puso Paliman y igual al programa de él, usted tendría que cambiar la referencia para que corresponda a sus necesidades. Un comentario más - con leer su Post, no pude determinar si al poner «MSP» en [A324] era que borrase o al no poner «MSP» que borrase. Ésto borra al poner, si es al contrario cambie el signo de = a <>.

<font face=Courier New><SPAN style="color:#00007F">Private</SPAN> <SPAN style="color:#00007F">Sub</SPAN> Worksheet_Change(<SPAN style="color:#00007F">ByVal</SPAN> Target <SPAN style="color:#00007F">As</SPAN> Range)
    <SPAN style="color:#00007F">Dim</SPAN> rngToClear <SPAN style="color:#00007F">As</SPAN> Range
    <SPAN style="color:#00007F">Set</SPAN> rngToClear = [B2:E11]   <SPAN style="color:#007F00">' Cambie al rango deseado</SPAN>
    
    <SPAN style="color:#00007F">If</SPAN> UCase([A324]) = "MSP" <SPAN style="color:#00007F">Then</SPAN>
        Application.EnableEvents = <SPAN style="color:#00007F">False</SPAN>
        rngToClear.ClearContents
        Application.EnableEvents = <SPAN style="color:#00007F">True</SPAN>
        Application.DisplayAlerts = <SPAN style="color:#00007F">False</SPAN>
        ActiveWorkbook.Save
        Application.DisplayAlerts = <SPAN style="color:#00007F">True</SPAN>
    <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>


</FONT>
Cordialmente,
 
Upvote 0
Una cosa más. La versión arriba no borra celda [A324]. Asi que cualquier cambio no va registrando. Entonces es muy posible que usted querría borrar [A324] también. Abajo hace eso.

<font face=Courier New><SPAN style="color:#00007F">Private</SPAN> <SPAN style="color:#00007F">Sub</SPAN> Worksheet_Change(<SPAN style="color:#00007F">ByVal</SPAN> Target <SPAN style="color:#00007F">As</SPAN> Range)
    <SPAN style="color:#00007F">Dim</SPAN> rngToClear <SPAN style="color:#00007F">As</SPAN> Range
    <SPAN style="color:#00007F">Set</SPAN> rngToClear = [B2:E11]   <SPAN style="color:#007F00">' Cambie al rango deseado</SPAN>
    
    <SPAN style="color:#00007F">If</SPAN> UCase([A324]) = "MSP" <SPAN style="color:#00007F">Then</SPAN>
        Application.EnableEvents = <SPAN style="color:#00007F">False</SPAN>
        rngToClear.ClearContents
        [A324].ClearContents
        Application.EnableEvents = <SPAN style="color:#00007F">True</SPAN>
        Application.DisplayAlerts = <SPAN style="color:#00007F">False</SPAN>
        ActiveWorkbook.Save
        Application.DisplayAlerts = <SPAN style="color:#00007F">True</SPAN>
    <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>


</FONT>
 
Upvote 0
Es fantástico Greg.

Es exactamente lo que necesitaba. Sólo una pregunta más. Habría alguna forma de que esto se cargase sin necesidad de que se preguntase al abrir el archivo o que no hubiese manera de abrir el archivo sin aceptar las macros?

La idea es que la seguridad del contenido funcione siempre, no sólo cuando se abre el archivo autorizando las Macros.

un saludo
 
Upvote 0
Hola Miguel,

Con mucho gusto. La forma que he visto propuesto aquí para forzar usarios tener macros capacitados es así:

Al salvar su cuaderno, tenga una sola hoja visible que tiene un mensaje en una de las celdas que informa al usarios que «Para utilizar este cuaderno es necesario tener macros capacitados. Si usted está viendo la presente es porque su configuración de Excel se ha descapacitados macros. Para capacitar macros....». Las demás hojas del cuaderno están en una condición de xlVeryHidden. (Si uno las pone en estado de solamente escondido {hidden} se puede "des-esconderlas" a mano usando el menú.) Luego uno pone código para el evento Workbook_Open() que cambia el estado de la «Hoja de Aviso» a xlVeryHidden y el estado de las hojas normales a Visible. Y la otra parte sería en el evento de Workbook_BeforeClose() que hace el reverso, devolviendo las hojas normales a un estado de xlVeryHidden y la Hoja de Aviso a un estado visible.

Para más información me imagino que una busqueda en Mr. Excel para los términos «Enable», «Macros» y «xlVeryHidden» debe proveer otras platicas sobre esta misma tema.

Ejemplos usando xlVeryHidden:

<font face=Courier New><SPAN style="color:#00007F">Sub</SPAN> EscondaMeBien()
    <SPAN style="color:#007F00">' Después de correr este macro no se puede "UnHide"</SPAN>
    <SPAN style="color:#007F00">' la hoja Sheet1 por medio del menu.</SPAN>
    Sheets("Sheet1").Visible = xlVeryHidden
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>
    
<SPAN style="color:#00007F">Sub</SPAN> AquiEstoy()
    Sheets("Sheet1").Visible = <SPAN style="color:#00007F">True</SPAN>
    Sheets("Sheet1").Activate
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>

</FONT>
 
Upvote 0
Hola Miguel,

Otra cosa que me parece obvio pero tal vez valga la pena decirlo es que en circumstancias donde un haría algo así entonces habrá que proteger el proyecto de VB también. O sea en el Editor de VB, (en inglés por lo menos, no tengo el menú en español) del menú Tools|VBA Project Properties...|Protection (la etiqueta) Pon un cheq en la caja para "Lock project for viewing." y la contraseña dos veces.

¡Pero ten cuidado que no se le olvide esta contraseña! Quebrar la contraseña para un cuaderno o para una hoja es bastante fácil. Según entiendo quebrar una contraseña para un proyecto, mientras posible, es más difícil.

Saludos,
 
Upvote 0
Hola Greg:
Podrias adjuntar un ejemplo en un archivo excel del uso adecuado de xlVeryHidden, por favor ya que me seria de mucha ayuda.
Agradezco de antemano vuestro apoyo.

Santiago
 
Upvote 0
Hola Santiago,

Para esconder las hojas podrias hacer algo asi:

Sub HideSheet()
Sheets("Sheet1").Visible = xlSheetVeryHidden
End Sub


Para mostrarla denuevo asi:

Sub ShowSheet()
Sheets("Sheet1").Visible = True
End Sub


Un saludo!
Leo
 
Upvote 0

Forum statistics

Threads
1,223,979
Messages
6,175,757
Members
452,667
Latest member
vanessavalentino83

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top