Viết Code cho File Excel Chỉ Mở Trên Một Máy Tính (1 người xem)

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

0905744404

Thành viên thường trực
Tham gia
26/10/10
Bài viết
333
Được thích
107
Nghề nghiệp
Trước là : Thủ Kho - còn giờ thì :"Tài Xế"
Em Chào Cả Nhà!!
Em nhờ các anh chị GPE giúp em viết code cho file excel chỉ mở trên một máy tính, để khi copy sang máy khác phải đổi code mới dùng được.
Cám ơn các anh chị
 
Upvote 0
Upvote 0
Giải pháp là thế này!!
1. Lập 1 hàm GetCPUID() gán trực tiếp vào file, lập 1 Sub workbook_open()
2. Chạy hàm cho máy tính hiện tại, lấy giá trị gán cố định vào code.
3. Trong sub() nói trên, so sánh giá trị của hàm GetCPUID() với giá trị cố định mà bạn đã gán. Nếu trùng thì cho mở file, không trùng thì đóng file luôn.
4. Để bảo vệ code trong file thì nhớ đặt pass.
Muốn linh động hơn, đặt 1 sheet ẩn veryhidden, gán giá trị GetCPUID() vào 1 cells nào đó. Tạo 1 form để gán giá trị này. Khi mở file, so sánh không trùng thì cho hiện form lên, dĩ nhiên lại phải qua 1 cái pass nữa (tự tạo bằng textbox là đơn giản nhất), nếu không thì ai cũng gán được.
giải pháp là như thế, còn cụ thể thì bạn tự làm nhé!! Làm thì đơn giản thôi, nhưng nếu bạn không tự làm e rằng khi chuyển qua máy tính khác thì bạn cũng bó tay với chính mình luôn!!!
Tham khảo 1 cách làm từ file này nhé!!
File này hoạt động như sau: so sánh ngày được gán cố định trong sheet ẩn protect. Nếu ngày hiện tại (hệ thống) lớn hơn ngày ấn định thì ẩn sheet Config (đương nhiên không có sheet này thì không dùng được cái gì trong file, File này giả lập tình huống như thế chứ không có liên hệ gì với tính toán trong file). Một form hiện lên để gán lại giá trị ngày tháng mới. Bạn gõ pass thuyphong198412 vào textbox hiện hành trong form, gán giá trị ngày tháng mới lớn hơn ngày hiện tại, save file, đóng file, mở lại sẽ thấy hiệu ứng.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Giải pháp là thế này!!
1. Lập 1 hàm GetCPUID() gán trực tiếp vào file, lập 1 Sub workbook_open()
2. Chạy hàm cho máy tính hiện tại, lấy giá trị gán cố định vào code.
3. Trong sub() nói trên, so sánh giá trị của hàm GetCPUID() với giá trị cố định mà bạn đã gán. Nếu trùng thì cho mở file, không trùng thì đóng file luôn.
4. Để bảo vệ code trong file thì nhớ đặt pass.
Muốn linh động hơn, đặt 1 sheet ẩn veryhidden, gán giá trị GetCPUID() vào 1 cells nào đó. Tạo 1 form để gán giá trị này. Khi mở file, so sánh không trùng thì cho hiện form lên, dĩ nhiên lại phải qua 1 cái pass nữa (tự tạo bằng textbox là đơn giản nhất), nếu không thì ai cũng gán được.
giải pháp là như thế, còn cụ thể thì bạn tự làm nhé!! Làm thì đơn giản thôi, nhưng nếu bạn không tự làm e rằng khi chuyển qua máy tính khác thì bạn cũng bó tay với chính mình luôn!!!
Tham khảo 1 cách làm từ file này nhé!!
File này hoạt động như sau: so sánh ngày được gán cố định trong sheet ẩn protect. Nếu ngày hiện tại (hệ thống) lớn hơn ngày ấn định thì ẩn sheet Config (đương nhiên không có sheet này thì không dùng được cái gì trong file, File này giả lập tình huống như thế chứ không có liên hệ gì với tính toán trong file). Một form hiện lên để gán lại giá trị ngày tháng mới. Bạn gõ pass thuyphong198412 vào textbox hiện hành trong form, gán giá trị ngày tháng mới lớn hơn ngày hiện tại, save file, đóng file, mở lại sẽ thấy hiệu ứng.
Em đã xem rồi nhưng không thực hiện được. nhờ mọi người giúp em với. Có thể Viết code lấy tên của máy tính cũng được (Full computer Name), VD máy tên ABC, thì code sẽ là ABC. khi máy có tên khác thì phải thay code trùng với tên máy thì mới mở File được.
Cảm ơn các anh chị!!
 
Upvote 0
Em đã xem rồi nhưng không thực hiện được. nhờ mọi người giúp em với. Có thể Viết code lấy tên của máy tính cũng được (Full computer Name), VD máy tên ABC, thì code sẽ là ABC. khi máy có tên khác thì phải thay code trùng với tên máy thì mới mở File được.
Cảm ơn các anh chị!!
Vậy bạn gửi phần bạn đã thực hiện nhưng chưa được lên, mọi người sẽ chỉnh sửa thêm, bớt giúp cho!
P/s: Nếu bạn tìm đọc thêm 1 số bài về bảo mật trong excel và vba tại diễn đàn này thì bạn có thể thấy, cố gắng thực hiện mục đích kia của bạn rất "mong manh"
 
Upvote 0
Em đã xem rồi nhưng không thực hiện được. nhờ mọi người giúp em với. Có thể Viết code lấy tên của máy tính cũng được (Full computer Name), VD máy tên ABC, thì code sẽ là ABC. khi máy có tên khác thì phải thay code trùng với tên máy thì mới mở File được.
Cảm ơn các anh chị!!
Bạn Vào nick Hoang Trong Nghia tìm các bài đã viết của nghĩa tham khảo xem. Trong đó có cả một siêu tập luôn đó và hướng dẫn rất chi tiết mà
 
Upvote 0
Vậy bạn gửi phần bạn đã thực hiện nhưng chưa được lên, mọi người sẽ chỉnh sửa thêm, bớt giúp cho!
P/s: Nếu bạn tìm đọc thêm 1 số bài về bảo mật trong excel và vba tại diễn đàn này thì bạn có thể thấy, cố gắng thực hiện mục đích kia của bạn rất "mong manh"
Mình tải file lên mọi người xem giúp, không biết thực hiện sai chỗ nào mà không được. Mình làm theo hướng dẫn của bài này: http://www.giaiphapexcel.com/forum/s...�y-tính-khác!
 

File đính kèm

Upvote 0
Mình tải file lên mọi người xem giúp, không biết thực hiện sai chỗ nào mà không được. Mình làm theo hướng dẫn của bài này: http://www.giaiphapexcel.com/forum/s...�y-tính-khác!

mình mở lên thấy code vẫn chạy bình thường mà. bạn thử thêm dòng Option Explicit lên trên sub Auto_Open xem sao
thường dim cái này cái kia thì phải thêm dòng đó vào thì phải. còn file của bạn không có dòng Option Explicit
 
Upvote 0

File đính kèm

Upvote 0
Tặng cho bạn một tuyển tập nè "Code trong file là của GPE" mình chỉ gom lại thôi
nhớ tắt macro đi. mở file lên chỉnh sữa code xong rồi mở lại nha
Hàm doc_ma_dia đôi khi không hoạt động ở một số máy tính do lỗi gì đó trong window. Hàm Readserienumber thì có nhược điểm là khi cài đặt lại window thì kết quả trả về thay đổi.
 
Upvote 0
Upvote 0
bạn dùng hàm này để lây ID
Mã:
Public Function GetProccesorID() as String
    Dim Str$, ObjWMI As Object, ColItems As Object, ObjItem As Object
    Set ObjWMI = GetObject("winmgmts:\\.\root\cimv2")
    Set ColItems = ObjWMI.ExecQuery("Select * from Win32_Processor")
    For Each ObjItem In ColItems
        Str = Str & ObjItem.ProcessorId
    Next
    GetProccesorID = Str
End Function

1/ lấy ID máy của bạn, chẳng hạn là : ABC12345XYZ
2/ khai báo trong modul nào đó: MY_ID = ABC12345XYZ

Trong ThisWorkbook tạo event

Mã:
Private Sub Workbook_Open()
   Dim UserID as String
   UserID = GetProccesorID()
   If UserID <> MY_ID then
      'làm gì bạn muốn
   End If
End Sub

đại loại vậy
 
Upvote 0
bạn dùng hàm này để lây ID
Mã:
Public Function GetProccesorID() as String
    Dim Str$, ObjWMI As Object, ColItems As Object, ObjItem As Object
    Set ObjWMI = GetObject("winmgmts:\\.\root\cimv2")
    Set ColItems = ObjWMI.ExecQuery("Select * from Win32_Processor")
    For Each ObjItem In ColItems
        Str = Str & ObjItem.ProcessorId
    Next
    GetProccesorID = Str
End Function

1/ lấy ID máy của bạn, chẳng hạn là : ABC12345XYZ
2/ khai báo trong modul nào đó: MY_ID = ABC12345XYZ

Trong ThisWorkbook tạo event

Mã:
Private Sub Workbook_Open()
   Dim UserID as String
   UserID = GetProccesorID()
   If UserID <> MY_ID then
      'làm gì bạn muốn
   End If
End Sub

đại loại vậy
đó chỉ có tác dụng khi người dùng enable macro thôi bác. nếu họ muốn mở chỉ cần disible macro là mở tuốt luôn.chỉ có password open là người dùng chịu chết thôi--=0
 
Upvote 0
Em Chào Cả Nhà!!
Em nhờ các anh chị GPE giúp em viết code cho file excel chỉ mở trên một máy tính, để khi copy sang máy khác phải đổi code mới dùng được.
Cám ơn các anh chị

Em thì em cứ "nông dân", cho VBA tìm tên 1 file text, không thấy thì khỏi mở (tất nhiên là Macro phải được chạy). hehe
 
Upvote 0

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

Back
Top Bottom