Como puedo hacer un excel para un solo uso?

Me explico tengo un archivo que debe capturar datos en una hoja y en las otras calcula y me da resultado de una evaluación, pero como tengo que enviarlo por correo para que completen el formulario de captura y sepan de inmediato el resultado, pero no quiero que lo vuelvan a usar. Estuve viendo en internet y aca mismo como bloquear el boton guardar, guardar como y el control + c, y aplicar un boton para guardar, pero eso hace que cada vez que lo abran lo puedan volver a usar, entonces no me soluciona mi problema.

¿Existe un comando que almecene las veces que se ha grabado el archivo? Porque se me ocurrio que bloqueando los guardar y guardar como, mas un contador que me permita habilitar o deshabilitar el boton de guardar podria resolverlo

1 respuesta

Respuesta
1

.10/08/16

Buenas noches,

Dado que existen múltiples caminos para guardar un archivo y evitar protecciones en MS Excel, habría que considerar qué tan maliciosos son tus usuarios.

Si crees que no fueran a buscar infinidad de formas de grabarlo, una mejor opción que grisar botones (se puede usar Ctrl + G o F12, por ejemplo) es interceptar cualquier intento de grabar el archivo (eso incluye cuando TU quieras hacerlo, pero tiene solución)

Para hacerlo, activa el editor de Visual Basic (presiona Alt+F11) y busca la hoja que dice "ThisWorkbook" Da doble click sobre ella.

Copia el código siguiente y pégalo en el panel desplegado a la derecha de su Editor de Visual Basic:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
MsgBox "No debes grabar este archivo", vbCritical, ">>>>> NO GRABAR!!!"
Cancel = True
End Sub

O si quieres que se cierre al intentar grabarlo, usa esta otra: 

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
MsgBox "Este archivo no puede guardarse!" & Chr(10) & "Ahora se cerrará", vbCritical, "NO GRABAR"
Application.DisplayAlerts = False
ActiveWorkbook.Close False
End Sub

Cierra el editor de Visual Basic.

A partir de ahora, ante cualquier intento de grabar el archivo aparecerá un mensaje alertando al usuario que no es posible grabar el archivo y -de hecho- no lo hará.

Para más seguridad, oculta esta macro protegiendo el proyecto: Herramientas; Propiedades del VBAProject; pestaña "Protección" y colocale clave, para que no pueda verse ni editarse.

... PERO

Todo esto es muy eficiente siempre que, claro está, el usuario haya habilitado macros cuando MS Excel le avisó que los tenía, o cuando quiera que no funcione.

Si abrió sin habilitar macros todo lo anterior es inútil y el archivo podrá ser grabado.

(De hecho, esta es la solución para cuando tu quieras grabarlo)

Una solución alternativa es cambiarle -por fuera y con el archivo cerrado - las propiedades a tal archivo (con el Explorador de Windows) y configurarlo como "de Sólo lectura".

Este procedimiento es sencillo y tu usuario también puede hacer el camino contrario para convertirlo en "grabable" nuevamente.

Por ello, tu mejor opción aunque no infalible es grabar tu archivo como plantilla y asignarle una contraseña de grabación para que sólo quien la conozca pueda grabar el archivo. Esto sin perjuicio de que apliques todas las otras recomendaciones que te dí.

Espero haber sido claro.

Un abrazo

Fernando

.

Hola! Gracias, pero en realidad quiero que lo graben, solo una vez, deben completar el formulario, ver los resultados y enviármelo de vuelta con el formulario Completo y los resultados.

.

Buenas tardes,

Ahora entiendo mejor, creo...

Y la solución pasa también por esa rutina disparada por el evento Guardar.

Voy a asumir que tienes una hoja ("Control") y en ella una celda, por caso "A8".

En el editor de Visual Basic (presiona Alt+F11) y busca la hoja que dice "ThisWorkbook" Da doble click sobre ella, copia el código siguiente y pégalo en el panel desplegado a la derecha de su Editor de Visual Basic:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' coordenadas de celda con contador:
HojaC = "Control"
CeldaC = "A8"
TopeGrab = 1
If Sheets(HojaC).Range(CeldaC).Value > TopeGrab - 1 Then
    MsgBox "Sólo es posible grabar este archivo 1 vez", vbCritical, ">>>>> NO GRABAR!!!"
    Cancel = True
Else
    Sheets(HojaC).Range(CeldaC).Value = Sheets(HojaC).Range(CeldaC).Value + 1
End If
End Sub

Esta rutina controla el valor del contador. En este caso le puse que sólo se pueda grabar 1 vez.

Es decir, cuando lo envíes el contador estará en 0 y luego de haberlo grabado cambiará a 1.

Si quiere volverse a grabar, la macro mostrará un mensaje y no lo grabará.

Alternativamente puedes hacer que se cierre, como te había explicado en el post anterior.

Sigue siendo válido que deshabilitar las macros, inhibirá este control.

Espero que ahora sí tu necesidad esté resuelta.

Abrazo

Fernando.

¡Gracias!  Si me lo resuelve N, con esto ya avanzo mucho, y puedo ir complementando con las cosas que ya sé, avisarle antes de guardar que tiene un solo intento, para no ser tan malo jaja. De nuevo muchas gracias 

.

Buenas,

Personalmente, colocaría la advertencia como un mensaje en el mismo archivo, un cuadro de texto, o algo así que se vea con frecuencia.

Como fuere, me alegra saber que te fue de ayuda.

Recuerda valorizar la respuesta de acuerdo al grado de satisfacción que te dio, para que no quede como pendiente.

Un abrazo

Fernando

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas