Ir al contenido principal

macros: FSO-evitar que abran nuestros proyectos en cualquier pc

Como soluciono la siguiente cuestión: por motivos de seguridad, o económicos, el libro de Excel que diseñé lleno de macros solo debe ejecutarse en una PC: si el usuario traslada el archivo a otra computadora, no tiene que funcionar más. Veamos como resolverlo.
Si bien hace poco vimos la potencia de las API's a la hora de obtener información o necesitar las funciones de nuestro Sistema Operativo, existe una alternativa muy buena para recabar datos sobre nuestro entorno de trabajo, accediendo al sistema de archivos: el objeto Scripting File System Object, el cual posee una buena cantidad de propiedades, métodos y eventos mas sencillos de comprender y manejar que las API's.
[+/-] Ver el resto / Ocultar

Comentarios

  1. gracias por tu comentario, estimado. espero que encuentres cosas de utilidad en mi blog.
    saludos.

    ResponderEliminar
  2. Hola Damian, gracias por tu valioso aporte, yo tengo el excel 2013, y me sale se ha producido el siguiente error 424 en tiempo de ejecucion, ejecutando el F8 me depura el :

    Set EsteDisco = FSO.GetDrive(RutaSO)

    ResponderEliminar
  3. Anónimo: me alegro que el aporte te sirva. El problema que te sale no e3s culpa del Office 2013, el culpable es... mi blog. Si copias y pegas el código que expongo, luego te arroja errores, por la inclusión implícita de caracteres no visibles (ni imprimibles) que, realmente no se por qué, dañan el código.
    Hacé lo siguiente: escribe tu mismo el código, tal cual lo ves en esta página, y no fallará.
    Por las dudas, y para ver si te sirve, copio aquí el código:
    'creo el objeto que luego invocaré:
    Dim FSO As New FileSystemObject

    Sub LeerDisco()
    'creo una variable del tipo Disco:
    Dim EsteDisco As Drive
    Dim RutaSO As String
    'veamos donde está el directorio del sistema:
    RutaSO = Environ("windir")
    'y tomemos los primeros tres caracteres, que corresponden a la
    'letra del disco:
    RutaSO = Left(RutaSO, 3)
    'seteo a EsteDisco como el disco del sistema, así me garantizo de
    'estar siempre leyendo la unidad principal de la pc:

    Set EsteDisco = FSO.GetDrive(RutaSO)
    MsgBox "Serie: " & EsteDisco.serialnumber & vbCrLf & "Disco del sistema: " & RutaSO

    Set FSO = Nothing
    Set EsteDisco = Nothing
    End Sub

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

macros: como enviar mails desde Excel (vba)

Un gran amigo "on-line", Johan Moreno, de Colombia , me hizo llegar la inquietud de cómo enviar mails desde Excel . Si bien contaba con algunas líneas de código sobre el particular, decidí retomar mi ejemplo y adaptarlo mejor a las circunstancias. Hace unos minutos termino de remitirle un correo con la solución a Johan... desde Excel y con un archivo adjunto, mismo que transcribo a continuación para ayudar a todos con esta tarea. Veamos primero las dos formas principales de enviar mails: mediante Outlook o nuestro Web Mail ( yahoo, gmail, hotmail, etc, etc ) No soy usuario de Outlook en lo absoluto: no confío en los agujeros de seguridad que continuamente aparecen y, por otro lado, t eniendo a mi alcance una herramienta tan poderosa (y gratuita) como Gmail, la cual ahora también permite sincronizar los mensaje con la Pc para verlos offline (deben activarlo en "google labs") ... no creo que me haga usuario ni hoy ni mañana. Igualmente mas adelante daré una solució...

sopa de letras en excel

Un lector me comenta que pudo visualizar varias sopas de letras en YouTube, realizadas con Excel. Inmediatamente me dirigí a dicho sitio y busqué información al respecto. Los ejemplos son buenos y si, efectivamente, podemos armar una muy buena "sopa de letras", salvo que (digamos) es un trabajo bastante manual, cosa que intento evitar a toda costa en mis proyectos. Obviamente que la tarea de automatización incluye Macros, lo cual me insume tiempo, pero queda mucho mejor. Vamos primero a explicar muy brevemente la forma de realizar esta juego "a la clásica", para luego pasar a un desarrollo mucho mas complejo, pero también automatizado y realista. la clásica grilla de una sopa de letras [+/-] Ver el resto / Ocultar Bien, analicemos un poco la imagen superior: 1) es una grilla de 20 filas x 20 columnas, aunque bien podríamos hacerla del tamaño que quisiéramos. 2) Cada celda tiene una letra, que fue generada  mediante la anidación de dos funciones. 3) Vean ahora la ba...

buscarv con varios resultados

Es de las preguntas mas recurrentes que he tenido: ¿se puede lograr que la función BUSCARV() devuelva varios resultados? Si recordamos el uso de esta función, sabremos que la misma buscar en valor en el rango especificado, retornando un solo resultado. Si en la tabla tenermos varios registros iguales BUSCARV() solo nos devolverá el primero de ellos, omitiendo el resto. Entonces ¿se puede? Bueno, aplicando otra técnica sencilla que se me ocurrió al intentar solucionar el planteamiento de un lector... si, puedo hacerlo.... pero sin usar BUSCARV(). la idea es que coloquemos en E1 el código del producto a buscar y a partir de E2 nos devuelva todas las coincidencias de la tabla. [+/-] Ver el resto / Ocultar Vamos a necesitar una columna "auxiliar" para llevar a buen término este proyecto. Con macros el tema sería mas sencillo, pero aquí la cuestión es resolverlo con las funciones de Excel, sin VBA. Paso a paso: Como primer medida chequeamos que valores de la columna A coincide co...