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 SubSi 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 = NothingLo 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.