Bloquear un libro para que sólo se ejcute desde un determinado dispositivo (drive)
publicado
Hola a todos,
Primero que nada, en apartado personal, debo disculpas al foro por haber descuidado algunas entradas que yo mismo abrí pidiendo ayuda para algunas cosas con las que no podía. Realmente si no contesto es porque no puedo, aunque alguna vez también se me olvida por completo, y con eso ya no puedo hacer mucho. Por lo tanto, mis disculpas a todos por las molestias ocasionadas, como a Gerson, que le dejé esperando unos cuantos días sin respuesta a su aportación (Para Gerson: gracias, pero al final lo solucioné bloqueando el acceso al código por Herramientas/Propiedades/Proteger código, aunque igual me salta el cuadro de diálogo. Di el tema por zanjado y me olvidé, literalmente, de entrar aquí y decirlo. Y si me dejo a alguien más sin contestar, lo siento...). Vuestra ayuda es inestimable, y os aseguro que sólo recurro a vosotros cuando voy desesperado y la cabeza rota ya, ni mucho menos espero las cosas masticadas
Para redimirme un poco, quiero aportar algo al foro. Es algo muy buscado, y llevo ya un tiempo peleándome con esto. Explico. La idea es "enlazar" un libro a un dispositivo USB, para que sólo funcione desde él.
El funcionamiento es el siguiente. Cuando se abre el archivo, comprueba el ID de la unidad desde la que funciona (la ruta, por ejemplo: G:\Excel\Libro1.xlsm, proporciona la unidad G), y pueden darse dos casos:
a) que el libro no se haya abierto nunca: el código de inicio guarda el número de ID del drive ("dispositivo": pendrive, HDD, etc) en una celda del libro, y deja proceder (editar el libro). Por supuesto, esto DEBE ser invisible al usuario; se debería hacer en alguna celda de una hoja oculta e "inaccesible". La ID se QUEDA GUARDADA, por el código, aunque el usuario cierre el libro inmediatamente tras su apertura (ya que hay un thisworkbook.save).
que el libro ya se haya abierto alguna vez: el código de inicio comprueba la ID del drive de la unidad de la ruta, y si coincide con la almacenada, deja cargar el libro como si nada (proceso transparente al usuario), pero si NO coincide la ID almacenada y la ID actual, salta un mensaje de error (un msgbox) y el libro se cierra, sin poder editarse.
La idea es la siguiente: yo creo un libro, que el receptor debe colocar en un pendrive (o lo pongo yo mismo), se ejecuta, y ese libro se "enlaza permanentemente" al dispositivo (a su ID) desde el que se abrió la primera vez.
La "pega" lógica de esto es que al quedar un archivo atado a un dispositivo, no podríamos (sin trastear código) editarlo desde el disco duro, aunque el archivo ES funcional en CUALQUIER ordenador (con Office ) SIEMPRE QUE SE EJECUTE DIRECTAMENTE DESDE EL PENDRIVE (ya que su ID no cambia), por lo que nadie puede utilizar el archivo fuera de su lugar de origen. Así, nadie podría "compartir" el libro que hemos creado. Lo que sí se podría, naturalmente (y sin poner más protección), es tener varias copias del mismo archivo en el pendrive (Ejemplo: E:\Cuentas1.xlsm, E:\Cuentas2.xlsm, etc), por lo que podríamos tener copias de seguridad (en el mismo USB, da igual la carpeta, mientras que la ID corresponda). También es perfectamente posible copiar el archivo en otro lugar fuera del pendrive, pero para ejecutarlo deberíamos "devolverlo" al pendrive. Es decir, yo puedo guardar mi libro en otro sitio y tener ese backup, pero no podría editarlo. Para ello, debería volverlo a colocar en el pendrive y abrirlo desde ahí.
Todos sabemos que hay formas de saltarse esta 'protección', pero para cualquier persona que no sepa mucho de esto, es un bloqueo en toda regla.
Subo un archivo de muestra con todas las opciones bien visibles para vosotros, y el código listo para ejecutarse. Recordad que se guarda la ID del drive desde donde se abra la primera vez, por lo que si queréis resetearla, re-abridlo desde el drive correcto, borrad la ID ecrita en la casilla B2, y GUARDAD Y CERRAD. O descargad de nuevo el archivo...
Para probar su funcionamiento, podéis hacer esto: descargad el libro, copiadlo a un pendrive cualquiera, ejecutadlo, cerradlo, copiad el archivo a vuestro disco duro, y probad a abrirlo de nuevo. También puede abrirse en otro PC desde el mismo pendrive, como ya he dicho antes.
El trozo de código para obtener la ID lo conseguí en esta página:
Hola a todos,
Primero que nada, en apartado personal, debo disculpas al foro por haber descuidado algunas entradas que yo mismo abrí pidiendo ayuda para algunas cosas con las que no podía. Realmente si no contesto es porque no puedo, aunque alguna vez también se me olvida por completo, y con eso ya no puedo hacer mucho. Por lo tanto, mis disculpas a todos por las molestias ocasionadas, como a Gerson, que le dejé esperando unos cuantos días sin respuesta a su aportación (Para Gerson: gracias, pero al final lo solucioné bloqueando el acceso al código por Herramientas/Propiedades/Proteger código, aunque igual me salta el cuadro de diálogo. Di el tema por zanjado y me olvidé, literalmente, de entrar aquí y decirlo. Y si me dejo a alguien más sin contestar, lo siento...). Vuestra ayuda es inestimable, y os aseguro que sólo recurro a vosotros cuando voy desesperado y la cabeza rota ya, ni mucho menos espero las cosas masticadas
Para redimirme un poco, quiero aportar algo al foro. Es algo muy buscado, y llevo ya un tiempo peleándome con esto. Explico. La idea es "enlazar" un libro a un dispositivo USB, para que sólo funcione desde él.
El funcionamiento es el siguiente. Cuando se abre el archivo, comprueba el ID de la unidad desde la que funciona (la ruta, por ejemplo: G:\Excel\Libro1.xlsm, proporciona la unidad G), y pueden darse dos casos:
a) que el libro no se haya abierto nunca: el código de inicio guarda el número de ID del drive ("dispositivo": pendrive, HDD, etc) en una celda del libro, y deja proceder (editar el libro). Por supuesto, esto DEBE ser invisible al usuario; se debería hacer en alguna celda de una hoja oculta e "inaccesible". La ID se QUEDA GUARDADA, por el código, aunque el usuario cierre el libro inmediatamente tras su apertura (ya que hay un thisworkbook.save).
La idea es la siguiente: yo creo un libro, que el receptor debe colocar en un pendrive (o lo pongo yo mismo), se ejecuta, y ese libro se "enlaza permanentemente" al dispositivo (a su ID) desde el que se abrió la primera vez.
Imaginad esta situación: tengo un disco duro ©, otro disco duro (D) y un pendrive (E). Si abro el archivo desde el pendrive (E), no podrá abrirse desde C: ni D: si lo copio allí, por lo que ese archivo ÚNICAMENTE podrá abrirse desde el pendrive. Y viceversa: si yo tengo un archivo en mi disco duro y alguien "me lo roba", NUNCA podrá abrirlo desde otro dispositivo que no sea mi disco duro.
La "pega" lógica de esto es que al quedar un archivo atado a un dispositivo, no podríamos (sin trastear código) editarlo desde el disco duro, aunque el archivo ES funcional en CUALQUIER ordenador (con Office
) SIEMPRE QUE SE EJECUTE DIRECTAMENTE DESDE EL PENDRIVE (ya que su ID no cambia), por lo que nadie puede utilizar el archivo fuera de su lugar de origen. Así, nadie podría "compartir" el libro que hemos creado. Lo que sí se podría, naturalmente (y sin poner más protección), es tener varias copias del mismo archivo en el pendrive (Ejemplo: E:\Cuentas1.xlsm, E:\Cuentas2.xlsm, etc), por lo que podríamos tener copias de seguridad (en el mismo USB, da igual la carpeta, mientras que la ID corresponda). También es perfectamente posible copiar el archivo en otro lugar fuera del pendrive, pero para ejecutarlo deberíamos "devolverlo" al pendrive. Es decir, yo puedo guardar mi libro en otro sitio y tener ese backup, pero no podría editarlo. Para ello, debería volverlo a colocar en el pendrive y abrirlo desde ahí.
Todos sabemos que hay formas de saltarse esta 'protección', pero para cualquier persona que no sepa mucho de esto, es un bloqueo en toda regla.
Subo un archivo de muestra con todas las opciones bien visibles para vosotros, y el código listo para ejecutarse. Recordad que se guarda la ID del drive desde donde se abra la primera vez, por lo que si queréis resetearla, re-abridlo desde el drive correcto, borrad la ID ecrita en la casilla B2, y GUARDAD Y CERRAD. O descargad de nuevo el archivo...
Para probar su funcionamiento, podéis hacer esto: descargad el libro, copiadlo a un pendrive cualquiera, ejecutadlo, cerradlo, copiad el archivo a vuestro disco duro, y probad a abrirlo de nuevo. También puede abrirse en otro PC desde el mismo pendrive, como ya he dicho antes.
El trozo de código para obtener la ID lo conseguí en esta página:
VBA Express Forum - View Single Post - Solved: Generate a computer's hardware code
Por lo que no dejo de reconocerle su parte de crédito al autor original del código, "xld". El resto de código y montaje es cosa mía ya
Un saludo a todos, y perdonad el tocho, pero había que explicar las cosas bien
PD Lo he puesto como un archivo de Office 2007-2010 habilitado para macros.
Libro1.zip