Làm để File XYZ chạy được ở Máy tính A hoặc B , nhưng không cho chạy ở Máy tính khác! (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Hong.Van

Busy
Tham gia
7/5/12
Bài viết
2,328
Được thích
1,765
Em chào Thầy cô & anh Chị!
Ở cty em có nhiều máy tính, bây giờ em muốn File "XYZ" chạy được ở máy tính A hoặc Máy tính B, ngòai 2 máy tính này thì sẽ không cho chạy bấy kỳ ở máy tính khác (Mục đích không cho copy File "XYZ" tràn lan ở các máy tính khác)
-----------
Em có sưu tầm code đọc Serial HDD
Mã:
Function doc_ma_dia()    Dim ObjetoWMI As Object
    Dim Disco As Object
    Dim Discos As Object
    Dim abc
    Set ObjetoWMI = GetObject("WINMGMTS:")
    Set Discos = ObjetoWMI.InstancesOf("Win32_PhysicalMedia")
    abc = ""
    For Each Disco In Discos
        abc = Disco.SerialNumber
        If Len(Trim(abc)) > 0 Then
            Exit For
        End If
    Next
    doc_ma_dia = Trim(abc)
End Function
giả sử em có Serial HDD:
Của Máy A là : S01JJ40Y233766
Của Máy B là : K12PAK5G
----------
Bây giờ em muốn dùng Sub Auto_Open() để kiểm tra Serial HDD của hai máy tính nói trên, nếu đúng thì tiếp tục, nếu sai thì thóat File. Nhờ Thầy cô & anh chị viết giúp code
---------------
Em cũng biết vấn đề bảo mật của Excel là hạn chế, nhưng vấn đề trên cũng để hạn chế copy File ra tùm lum rồi không biết cái nào là bản chính, cái nào là phụ!
Em cảm ơn!
 
!$@!! sao file vẫn cứ vào ào ào, mặc dù mình không để đúng seri của máy nhỉ ?
 
Upvote 0
Nếu lấy mã ổ C thì trường hợp giống nhau sẽ phổ biến, ví dụ lên mạng tải chung 1 bản ghost WIn 7 thì tất cả những máy dùng bản ghost đấy đều có chung mã của ổ C.
 
Upvote 0
bạn đâu có add code ở các bài trên vào file đâu!!!
Thử lại với file này!
Thanks bạn !
Cho phép mình hỏi thêm có câu này !
Cũng đoạn code trên giờ mình muốn :
- Vẫn như cũ nhưng thêm là " Nếu đăng nhập bằng nick Admin thì dù ở máy tính nào cũng dùng được " có được ko ?
 
Upvote 0
Theo em nghĩ, việc phân quyền file này chạy được ở máy này nhưng không chạy được ở máy kia là nhu cầu cần thiết. NHƯNG nếu logic để kiểm tra xem máy có đó có được đọc file được hay không lại nằm chính trong file đó thì việc làm này mang ít ý nghĩa và mất thời gian, tuy nhiên cho mục đích làm cho biết, học hỏi thì OK, còn trong thực tế thì không có tác dụng gì nhiều. Có đọc qua thì thấy code check series của ổ cứng và 1 số code nữa sử dụng win api. Chắc mọi người cũng biết, bản excel dành cho Mac OS cũng hỗ trợ VBA, nếu dùng win api thì chắc chắn sẽ không hoạt động, bởi vì win api chỉ hoạt động trên windows.

Và việc như chị chủ topic nói "[...] hạn chế copy File ra tùm lum rồi không biết cái nào là bản chính, cái nào là phụ [...]". Vấn đề nằm ở chỗ quản lý file, ai được nhận file, ai được nhìn thấy file, ai có quyền truy cập file ... Nếu vấn đề như thế này mà người đi làm phải tự giải quyết với nhau thì em xin được phép hỏi là không biết công ty chị có bộ phận IT ko :P, công ty có sử dụng Active Directory hay SharePoint ko .
 
Lần chỉnh sửa cuối:
Upvote 0
Sao mình thay seri của HDD máy mình vào mà file vẫn không chạy vậy mọi người?
 
Upvote 0
Sao mình thay seri của HDD máy mình vào mà file vẫn không chạy vậy mọi người?
Bạn thay Seri = cách nào? có dùng hàm ở dưới kg?
Mã:
Function doc_ma_dia()    Dim ObjetoWMI As Object
    Dim Disco As Object
    Dim Discos As Object
    Dim abc
    Set ObjetoWMI = GetObject("WINMGMTS:")
    Set Discos = ObjetoWMI.InstancesOf("Win32_PhysicalMedia")
    abc = ""
    For Each Disco In Discos
        abc = Disco.SerialNumber
        If Len(Trim(abc)) > 0 Then
            Exit For
        End If
    Next
    doc_ma_dia = Trim(abc)
End Function
 
Upvote 0
Bạn thay Seri = cách nào? có dùng hàm ở dưới kg?
Mã:
Function doc_ma_dia()    Dim ObjetoWMI As Object
    Dim Disco As Object
    Dim Discos As Object
    Dim abc
    Set ObjetoWMI = GetObject("WINMGMTS:")
    Set Discos = ObjetoWMI.InstancesOf("Win32_PhysicalMedia")
    abc = ""
    For Each Disco In Discos
        abc = Disco.SerialNumber
        If Len(Trim(abc)) > 0 Then
            Exit For
        End If
    Next
    doc_ma_dia = Trim(abc)
End Function

Có chứ. Mình copy phần đó vào ThisWorkbook, và insert module
chỗ Sub Auto_Open()
Dim sSeri As String
sSeri = doc_ma_dia
If sSeri <> "mình đã thay số seri của ổ đĩa vào đây" And sSeri <> "K12PAK5G" Then ThisWorkbook.Close False
End Sub
 
Upvote 0
And sSeri <> "K12PAK5G"
Xóa cái khúc này đi. Bạn đọc thì phải đọc từ đầu tới cuối chứ
 
Upvote 0
And sSeri <> "K12PAK5G"
Xóa cái khúc này đi. Bạn đọc thì phải đọc từ đầu tới cuối chứ

Mình có đọc mà. Như giải thích ở bài 6 thì chỉ cần đúng 1 trong 2 là được rồi.

Mình làm như bạn nói xóa khúc sau luôn cũng không chạy được. Seri của HDD máy mình là SOYXJ10P610780
 
Upvote 0
Phần vào ThisWorkbook:

Function doc_ma_dia()Dim ObjetoWMI As Object
Dim Disco As Object
Dim Discos As Object
Dim abc
Set ObjetoWMI = GetObject("WINMGMTS:")
Set Discos = ObjetoWMI.InstancesOf("Win32_PhysicalMedia")
abc = ""
For Each Disco In Discos
abc = Disco.SerialNumber
If Len(Trim(abc)) > 0 Then
Exit For
End If
Next
doc_ma_dia = Trim(abc)
End Function


Phần vào module:

Sub Auto_Open()
Dim sSeri As String
sSeri = doc_ma_dia
If sSeri <> "SOYXJ10P610780" And sSeri <> "K12PAK5" Then ThisWorkbook.Close False
End Sub


Chỗ bôi đỏ là seri HDD máy mình. Bỏ phần And sSeri <> "K12PAK5" hay để vẫn không chạy.
 
Upvote 0
Mình nghĩ thì có khi bạn lấy seri HDD bị sai rồi, chứ code thì bình thường mà
 
Upvote 0
Mình nghĩ thì có khi bạn lấy seri HDD bị sai rồi, chứ code thì bình thường mà


Mình dùng nhiều chương trình khác nhau nó cũng chỉ ra một số đó nên mình nghĩ nó không sai. Mình cũng có dùng file ở bài 23 để lấy số seri.

Máy mình xài bản Win Ghost.
 
Upvote 0
Mình dùng nhiều chương trình khác nhau nó cũng chỉ ra một số đó nên mình nghĩ nó không sai. Mình cũng có dùng file ở bài 23 để lấy số seri.

Máy mình xài bản Win Ghost.
Thôi thì dùng thủ cách khác
http://www.giaiphapexcel.com/forum/...àm-nào-trả-về-tên-máy-tính-hay-tên-người-dùng
Mã:
Function GetComputername()
  Application.Volatile
  GetComputername = Environ("COMPUTERNAME")
End Function
Function GetUserName()
  Application.Volatile
  GetUserName = Environ("USERNAME")
End Function
Sub Auto_Open()
  Dim sSeri As String
  sSeri = GetUserName
  If sSeri <> "TH User" Then ThisWorkbook.Close False
End Sub
 

File đính kèm

Upvote 0
Hôm nay đã được rồi, do hàm doc_ma_dia () nó đọc ra số seri có trật tự khác với file ở bài 23 nên nó k chạy. Mình gõ =doc_ma_dia () và thay số đó vào thì chạy ok rồi.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom