Autorización para copiar en otro equipo

Hola espero me puedas ayudar con la siguiente tarea.
Me solicitan un Libro en excel 2003 o 2007 para un reporteador pero lo protejo para que solo utilicen ciertas celdas para que no modifiquen o borren las fórmulas sin embargo esto parece ser no es suficiente ya que están pirateando la chamba y es por eso que necesito saber si hay alguna forma de que al copiar dicho libro y lo quieran abrir en otro equipo se bloque o solicite alguna contraseña.
No protejo el libro ya que la persona que lo ocupa necesitaría saber la contraseña y no es muy confiable.
Espero me puedas ayudar

1 respuesta

Respuesta
1
Pues puedes ponerle contraseña de apertura que es en guardar ahí en opciones guardar o herramientas opciones seguridad
De hecho ya lo intente pero te deja copiar el archivo a otro equipo y es lo que se trata de evitar solo con una llave o contraseña te deje copiarlo
A ver ya la diste proteger hoja y le quitaste el check a seleccionar celdas bloqueadas y le pones contraseña entonces y aparte proteges el libero y la contraseña de apertura ya no te dejara seleccionar más que las celdas que el usuario pueda modificar
Así es, pero lo que pretendo es que no lo copeen otra maquina, aunque las fórmulas están protegidas y el libro también me lo han modificado en otros equipos no se el motivo ni tampoco como lo logran es por ello que necesito que al tratar de copiar el archivo a una usb, disco o por mail pida una clave que solo yo sepa
La fácil que se me ocurre es que programes mediante una macro una lectura mediante las Apis de windows que indentifique la maquina que esta autorizada a tener el archivo y que si no se cierre, que protejas el código para que no se visualice.
Pero esto es nada más dificultarle al usuario copiar tu archivo ya que si cuenta con herramientas para descifrar password pues es fácil que te abran el código y vean tu validación así que tendrías que pensar otra manera de acceder la información si es fundamental que no te copien el archivo puedes hacer un programa que suba la información de un archivo de texto plano y que la procese así estarías seguro que no te modificarían tu código
Ok y esto como lo hago
Usando las API's de windows te pongo un ejemplo identificando el usuario de la maquina. Este código lo pegas en thiswoorkbook del libro en open y al abrir te identifica el usuario de la maquina(vaya con el que se registro para entrar)
' Funciones de windows
Public Declare Function apiGetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
                        (ByVal lpBuffer As String, nSize As Long) As Long
Public Declare Function TerminateProcess Lib "Coredll" _
                         (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Public Declare Function WaitForSingleObject Lib "kernel32" _
         (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
                       (ByVal lpszClassName As String, ByVal lpszWindow As String) As Long
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
         (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function IsWindow Lib "user32" _
         (ByVal hwnd As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" _
         (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
          ByVal dwProcessId As Long) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" _
         (ByVal hwnd As Long, lpdwProcessId As Long) As Long
'Constants that are used by the API
Public Const WM_CLOSE = &H10
Public Const INFINITE = &HFFFFFFFF
Public Const SYNCHRONIZE = &H100000
' Obtiene el Usuario del Sistema
Public Function fOSUserName() As String
' Returns the network login name
Dim lngLen As Long, lngX As Long
Dim strUserName As String
    strUserName = String$(254, 0)
    lngLen = 255
    lngX = apiGetUserName(strUserName, lngLen)
    If (lngX > 0) Then
        fOSUserName = Left$(strUserName, lngLen - 1)
    Else
        fOSUserName = vbNullString
    End If
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas