Es posible, por ejemplo, sabiendo el nº de serie de los discos duros y que al abrir el archivo lo compruebe, si no es alguno de los discos permitidos, cierra Excel. De todas formas, con conocimientos avanzados se podría desproteger el código, y borrar esta macro que te pongo a continuación. Te aviso para que veas que no es infalible.
Lo primero es saber el número de serie de los pc´s en los que se permite trabajar con el libro, haz lo siguiente en cada PC:
1º Busca la aplicación cmd.exe, (Símbolo del sistema)
2º Escribe Vol letra unidad: Cambia letra unidad por la letra del disco del que quieras saber el nº de serie. No te olvides de los dos puntos :
3º Guarda el nº de serie (sin el guión) que te muestre.
En ThisWorkbook pon lo siguiente:
Private Sub Workbook_Open()
'Por Marcial Castro'
nserie1 = "5C1B117B" 'Pon aquí el número de serie del 1 PC'
nserie2 = "5C1B117B" 'Pon aquí el número de serie del 2 PC'
n = NumeroSerieUnidad("C")
If nserie1 = n Or nserie2 = n Then
MsgBox n
Else
Application.DisplayAlerts = False
Application.Quit
End If
End Sub
Si el disco es correcto, muestra un mensaje con el número de serie, bórralo cuando pruebes la macro, es sólo para ver que te funciona.
Y esta es la función, que la puedes colocar en el mismo a continuación de lo anterior, o en un módulo.
Function NumeroDeSerie(ByVal unidad As String) As String
'Por Marcial Castro'
Dim fso As Object, disco As Object
Dim SerieUnidadDec As Long
Set fso = CreateObject("Scripting.FileSystemObject")
Set disco = fso.GetDrive(unidad)
With disco
If .IsReady Then
nDec = Abs(.SerialNumber) 'En decimal'
Else
nDec = -1
End If
End With
nHex = Application.WorksheetFunction.Dec2Hex(nDec) 'En Hexadecimal'
NumeroDeSerie = nHex
Set disco = Nothing
Set fso = Nothing
Lo que hace esta función es guardar el numero de serie en decimal (de la unidad que le indiquemos) y convertirlo a hexadecimal, que es cómo los tenemos en Sub Workbook_Open().
Si te ha valido la respuesta.