Controlar desde que PC se abre un archivo de Excel

Hace unos dias me pidieron que determinado excel solo pueda ser abierto desde algunas PC, con lo cual me puse a ver algunas alternativas, la primera fue poner una contraseña al excel, pero, esto no soluciona el problema de que sea abierto solo en algunas PC.    

Entonces se me ocurrio que el excel controlara (al abrirse) dede que PC se esta briendo, para esto determine que la mejor forma de hacerlo era revisando la MAC Address de la PC.  

Se que no es una forma muy segura y que existen formar de clonar la MAC Addres, etc, pero, hasta el momento no se me ha ocurrido algo mejor, escucho ofertas.   Aca esta la "implementación" de lo descripto anteriormente  

' GetTempPath
' La función de la API de GetTempPath permite determinar la ubicación de ruta de acceso
' de carpeta temporal de un sistema. Toma dos parámetros: la longitud de una cadena de
' longitud fijo o pre-initialized que contendrá el nombre de la ruta de acceso y la
' cadena de sí misma. Debe utilizar una cadena longitud fija o una cadena inicializada
' con una longitud que crees será longitud suficiente para incluir la información de
' ruta de acceso. Esto es para garantizar que Visual Basic asigna suficiente espacio
' de búfer para Windows devolver la información.

' GetTempPath devuelve la longitud del nombre de ruta de acceso medido en bytes o
' 0 si se produce un error. Si el valor devuelto es mayor que el tamaño del búfer
' que especificó, entonces no hay información de ruta de acceso se escribió en la cadena.


Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Const MAX_PATH = 260


' Esta función utiliza la API de Windows GetTempPath para obtener
' la carpeta temporal
Private Function GetTmpPath()

    Dim sFolder As String ' Nombre de la carpeta temporal
    Dim lRet As Long ' Largo
    
    sFolder = String(MAX_PATH, 0)
    lRet = GetTempPath(MAX_PATH, sFolder)
    
    If lRet <> 0 Then
        GetTmpPath = Left(sFolder, InStr(sFolder, _
        Chr(0)) - 1)
    Else
        GetTmpPath = vbNullString
    End If

End Function



' Obtenemos la MAC a traves de un comando de windows ipconfig
' esta version solo funcionaria con windows xp en español
' si tienes una version distinta o distinto lenguale deberias
' cambiar el comando find ""Direcci¾n fÝsica"".
' El resultado de comando lo guarda en un archivo llamado max.txt
' ubicado en la carpeta temporal del usuario actual del sistema.
' Luego se abre el archivo mac.txt y busca la direccion mac en
' cierta posición (mas puntualmente 17 caracteres comenzando en
' en el caracter 45 de la linea 1 del archivo).
' Lo que encuentre en esa posicion es devuelto como la mac de la pc.
Function Get_MAC_Address(strComputer)
    Set objShell = CreateObject("WScript.Shell")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    dTemp = GetTmpPath()
    
    objShell.Run "cmd /c ipconfig /all | find ""Direcci¾n fÝsica"" > " & dTemp & "\MAC.txt | cd %temp%", 0, True
    
    Set objMACFile = objFSO.OpenTextFile(dTemp & "\MAC.txt", 1, False)
    
    While Not objMACFile.AtEndOfStream
        strLine = objMACFile.ReadLine
        If Len(strLine) > 35 Then
            strMAC = Mid(strLine, 45, 17)
        End If
    Wend
    
    objMACFile.Close
    Set objMACFile = Nothing
    Set objShell = Nothing
    Set objFSO = Nothing
    Get_MAC_Address = strMAC
End Function

' cuando el archivo es cerrado se vuelve a proteger el libro
' y se guarda antes de cerrar.
Private Sub Workbook_Deactivate()
    ThisWorkbook.Protect ("$esta$es$una$prueba$de$seguridad$")
    Hoja1.Protect ("$esta$es$una$prueba$de$seguridad$")
    ThisWorkbook.Save
End Sub

' cuando es abierto se controla que la mac que devuelve la
' funcion get_mac_address sea la autorizada, esa direccion
' debe ser modificada por la correcta.
' en caso de ser correcta se muestra un mensaje al usuario
' indicando que esta autorizado a abrir el excel.
' en caso contrario se muestra un mensaje de que no esta
' autorizado y se cirra el excel.
Private Sub Workbook_Open()
    If (Get_MAC_Address(strComputer) = "08-00-27-B0-D6-A1") Then
        MsgBox ("Seguridad OK")
        ThisWorkbook.Unprotect ("$esta$es$una$prueba$de$seguridad$")
        Hoja1.Unprotect ("$esta$es$una$prueba$de$seguridad$")
    Else
        MsgBox ("Su PC no esta autorizada para abrir este documento")
        ThisWorkbook.Close
    End If
End Sub


Lo único que faltaría seria poner un buenas contraseña al modulo (o sea el código).


Comentarios

y saltos de línea?

aparentemente al modulo que muestra el codigo( SyntaxHighlighter), me borra los saldos de lineas...

El problema era que tenia algunos plugin como remove format  Yell

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.

Tags for Controlar desde que PC se abre un archivo de Excel