Aș dori să vă întreb dacă poate fi rezolvată o problemă definită astfel: am un fișier Word (format DOCM), pe care eu îl creez, salvez, etc.
Fișierul trebuie să conțină o rutină macro, care la deschiderea fișierului să facă următoarele lucruri:
1). Dacă adresa MAC a dispozitivului (computer, sau telefon inteligent, sau tabletă, etc.) este adresa MAC1 (știută, cunoscută), atunci rutina macro nu trebuie să facă nimic;
2). Presupunând că trimit fișierul la persoana X, care îl va deschide cu un alt dispozitiv (având o adresă MAC2, diferită de MAC1). Rutina macro trebuie să preia adresa MAC2 și să o stocheze. Ori de câte ori fișierul va fi deschis, de către un utilizator pe dispozitivul cu adresa MAC2, acel fișier trebuie să poată fi folosit fără restricții;
3). Dacă persoana X trimite fișierul cu pricina la altcineva (la persoana Y), care dorește să deschidă fișierul pe un dispozitiv cu adresa MAC3, care este diferită de MAC2 și este diferită de adresa MAC1, atunci rutina macro să blocheze deschiderea fișierului și eventual să afișeze un mesaj simplu, de genul “Accesul nu este permis”.
O funcție VBA care preia adresa MAC este cea de mai jos (nu am testat-o, nu știu dacă funcționează corect):
Cod: Selectaţi tot
Option Explicit
Function GetMyMACAddress() As String
'Declaring the necessary variables.
Dim strComputer As String
Dim objWMIService As Object
Dim colItems As Object
Dim objItem As Object
Dim myMACAddress As String
'Set the computer.
strComputer = "."
'The root\cimv2 namespace is used to access the Win32_NetworkAdapterConfiguration class.
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
'A select query is used to get a collection of network adapters that have the property IPEnabled equal to true.
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
'Loop through all the collection of adapters and return the MAC address of the first adapter that has a non-empty IP.
For Each objItem In colItems
If Not IsNull(objItem.IPAddress) Then myMACAddress = objItem.MACAddress
Exit For
Next
'Return the MAC address;
GetMyMACAddress = myMACAddress
End Function
Soluția trebuie să țină cont de faptul că nu există un singur fișier de trimis și nu va exista un singur destinatar al fișierului, deci o adaptare la utilizare multiplă este un mare plus. Vă mulțumesc anticipat.
Green eyes.