Control de PC para abrir archivos Excel

Quisiera saber como impedir que un archivo .xls sea abierto en un PC no autorizado. Trato de evitar que alguien se lleve copia de ficheros en diskette y puedan ser abiertos en otros ordenadores.
He pensado en crear un fichero oculto instalado en los PC autorizados, el cual sería "buscado" por los archivos de Excel antes de abrirse.
Respuesta
4
Básicamente hay dos cosas que proteger, la información y el código, puedes proteger una, lo
Otro, o los dos, veamos algunos casos:
**************************
Protegiendo el acceso al archivo: este caso es casi seguro que lo conoces, es simplemente, al
Momento de guardarlo establecerle una contraseña de acceso...
Archivo | Guardar Como...
Del menú Herramientas seleccionas Opciones Generales
Le estableces la contraseña de protección
Le asignas nombre y guardas
Esta contraseña, en "general" es suficiente, para un usuario medio será prácticamente imposible
Abrirlo...
**************************
Protegiendo el acceso al código: si lo que quieres proteger es el código de tus macros, sigue
Estos pasos...
Abre tu archivo
Entra al Editor de VBA Alt+F11
Ve al menú Herramientas | Propiedades de VBAProyect
Ve a la ficha Protección
Activas la casilla de verificación Bloquear proyecto para visualización
Estableces una contraseña (ya sabes, una que no se te olvide)
Ahora al abrir el archivo, aunque el usuario deshabilite las macros, no podrá ver tu código...
**************************
Protegiendo datos y código: para esta hacer esto, hay varias formas, de hecho muchas, tantas como
Tu imaginación y dominio del VBA te lo permitan, veamos una de ellas, sencilla, practica y
Eficiente, como sabes las hojas de tu libro las puedes ocultar, pruébalo desde el menú Formato |
Hoja | Ocultar, prueba a irr ocultando hoja por hoja, veras que la ultima hoja no te lo
Permitirá, pues un libro debe de tener al menos una hoja visible, podrías ocultar todas las hojas
Y solo dejar una vacía o con información sin importancia, el peligro de esto, es que el usuario
Del mismo modo que las puede proteger, las desprotege sin problemas, veamos como ocultar sin que
Pueda el usuario mostrarlas...
Supongamos que tienes un libro con tres hojas Hoja1, Hoja2 y Hoja3 y que la Hoja1, tendrá
Información sin importancia y será la que dejaremos visible
Entra al Editor de VBA
Selecciona la Hoja2, ve a la ventana de propiedades (F4) y busca la propiedad Visible, casi
Siempre es la ultima
Veras que esta propiedad tiene tres valores
-1 xlSheetVisible
0 xlSheetHidden
2 xlSheetVeryHidden
La primera es la normal Visible, la segunda es equivalente a ocultarla desde el menú formato
Desde Excel, la tercera es la interesante, por que esta oculta la hoja, pero no es posible
Mostrarla desde el menú formato, ni siquiera se ven desde ahí, esta propiedad solo la modificas
Desde esta ventana en el Editor VBA o con código y eso es lo que sigue...
Ya que estén ocultas las hojas que quieras, ahora las mostraremos al abrir el archivo y
Ocultaremos al cerrar, claro, previamente ya protegiste tanto el acceso al archivo como el acceso
Al código...
Ahora entra (o si ya estas ahí) al Editor VBA
Selecciona el objeto Thisworkbook (si no le has cambiado el nombre)
Selecciona el evento Open y el evento BeforeClose y agregales el siguiente código (claro, puedes
Copiarlo)
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Hoja2.Visible = xlSheetVeryHidden
Hoja3.Visible = xlSheetVeryHidden
End Sub
Private Sub Workbook_Open()
Hoja2.Visible = xlSheetVisible
Hoja3.Visible = xlSheetVisible
End Sub
Pruébalo, veraz que solo cuando habilitan las macros es que muestra las hojas ocultas y están
Solo se pueden ver por código como lo estamos haciendo o por la ventana de propiedades a la cual
No tienen acceso, muy importante, oberva el nombre las hojas, es muy diferente al "nombre" que ve
El usuario, si observas el explorador de proyectos desde el Editor VBA, veras que dice algo así
Hoja1 (Hoja1)
Hoja2 (Hoja2)
Hoja2 (Hoja2)
Podríamos usar este código
Worksheets("Hoja2").Visible = xlSheetVisible
Pero ahora ve a la hoja2 y cambiale el nombre, cierra, abre y veras que te dará un error en la
Linea anterior, entra de nuevo al Editor y veras que ahora dice...
Hoja2 (Datos)
Es decir, entre paréntesis estará el nombre que el usuario "ve" y puede cambiar y nosotros usamos
El nombre que no puede modificar
Como dije, esto es solo una forma de las muchas que hay,
Mucho más completo en mi página.
Creo que tu respuesta me ayuda a proteger los archivos excel, tanto por contraseña en el archivo que ya conocía, como por código (que me ha venido muy bien).
Pero yo me refería a evitar que dichos archivos puedan ser copiados en un diskette, enviados por mail, etc.. y abiertos en otros PC que no sean de la empresa.
Los usuarios de la empresa conocen las password para abrir dichos ficheros, pero quiero evitar que los mismos puedan llevarse información confidencial fuera de su lugar de trabajo. Quiero que dichos archivos no puedan ser abiertos, o leídos, más que en los ordenadores de la empresa.
Para esto también hay muchas maneras, te mostrare una de ellas...
Ejecuta las siguientes macros
Esta macro la tienes que ejecutar en todos los PC de tu trabajo donde quieras que se pueda usar el archivo
Private Sub Autorizar()
SaveSetting "MiArchivo", "Util", "Autorizado", "si"
End Sub
Esta es para cuando ya no este autorizado
Private Sub QuitarAutorizacion() DeleteSetting "MiArchivo", "Util", "Autorizado"
End Sub
Ahora, dentro del evento Open de cada libro que quieras proteger, buscara esta clave y si no la encuentra no dejara abrirlo...
Option Explicit
Private Sub Workbook_Open()
Dim Paso As String
Paso = LCase(GetSetting("MiArchivo", "Util", "Autorizado"))
If Paso = "si" Then
MsgBox "BIENVENIDO"
Else
MsgBox "NO ESTAS AUTORIZADO A USAR ESTE LIBRO"
ThisWorkbook.Close False
End If
End Sub
Claro, puedes poner algo más difícil que un "si"
Ok, la solución la he probado y funciona ... salvo si el usuario "pincha" en deshabilitar macros, en cuyo caso el fichero se abre sin el control que me has enviado.
Otra pregunta: cuando me indicas que puedo poner algo más difícil que un "si", que sentido tiene puesto que no es una password que pregunta al usuario, sino un control en el registro.
Omite la primera parte de mi anterior pregunta, puesto que, investigando un poco como tu pides, y combinando la información anterior (ocultar códigos y solapas de los libros si se deshabilitan macros) lo he conseguido.
Tan solo una última curiosidad: cuando me indicas que puedo poner algo más difícil que un "si", que sentido tiene puesto que no es una password que pregunta al usuario, sino un control en el registro.
Modifica el código para que quede así, el secreto esta en mantener el libro oculto y con contraseña, si el usuario Habilita las macros y esta autorizado lo dejara pasar, le quitara la contraseña al libro y lo mostrara, sino esta autorizado le cerrara el libro, si el usuario Deshabilita las macros, el libro estará oculto y con contraseña, pero si trata de mostrarla le pedirá la contraseña que por supuesto esta no se la debes de dar, respecto a usar otra cosa en vez de un simple "si" es que hay usuarios muy curiosos que sabrían donde buscar para encontrar esta contraseña y la pueden ver, así que si tu guardar por ejemplo un 10 pero la contraseña real es un 11, podrías obtener la contraseña y sumarle un 1, así si el curioso encuentra el 10 no podrá abrir el archivo de todos modos
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Windows(ThisWorkbook.Name).Visible = False
ThisWorkbook.Protect "abrete", True, True
ThisWorkbook.Saved = True
ThisWorkbook.Close
End Sub
Private Sub Workbook_Open()
Dim strUsar As String
strUsar = GetSetting("MiArchivo", "Util", "Autorizado")
If strUsar <> "si" Then
MsgBox "No estas autorizado para usar este archivo", vbCritical
ThisWorkbook.Close
End If
ThisWorkbook.Unprotect "abrete"
Windows(ThisWorkbook.Name).Visible = True
End Sub
No he entendido bien el último código que me has enviado (desaparece incluso cuando vuelvo a abrir el fichero), pero con las soluciones enviadas anteriormente has solucionado mi problema.
Efectivamente, la clave es ocultar lo máximo posible la búsqueda del "si", o su sustituto, en el regedit.
Muchísimas gracias por tu servicio. Un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas