Tạo password bằng số seri của máy (2 người xem)

  • Thread starter Thread starter nad582
  • Ngày gửi Ngày gửi
Liên hệ QC

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

nad582

Thành viên thường trực
Tham gia
7/6/11
Bài viết
317
Được thích
48
chào các bạn!! Mình có vần đề như sau:
Khi mở file lên thì hiện lên 1 bảng (userForm) có 3 phần:
1 là username: chính là tên của máy tính
2 là Password 1: chính là số seri của máy tính
3 là Password 2: chính là số HDD của máy tính
khi điền đúng đủ 3 phần trên thì mở file, nếu 1 trong 3 phần trên sai thì close file.....
mình có file lấy số seri ở file đính kèm...
Nhờ các bạn giúp mình. Thanks nhiều...^^
 
Nói chung là bạn chỉ cần cái này (đặt trong module của Thisworkbook):

Mã:
Option Explicit

Private Sub Workbook_Open()
    Dim SeriesNumber As String, HDD As String
    SeriesNumber = "202020202020202020202020563534484b463651"
    HDD = "2073004635"
    If doc_ma_dia <> SeriesNumber Or Readserienumber <> HDD Then
        If Application.Workbooks.Count = 1 Then
            Application.Quit
        Else
            ThisWorkbook.Close False
        End If
    End If
End Sub

Khi chạy cái này, nhằm hạn chế tối đa các vấn đề không cho chạy macro, bạn nên ẩn sheet (veryhidden), chỉ chừa 1 sheet Menu hay giới thiệu gì đó thôi. Đồng thời phải protect structure của workbook thì sẽ hạn chế bị xem file.

Tôi không hiểu được ý tưởng của bạn.
Nếu code là thế thì ngay cả bạn bạn cũng không thể xem được tập tin của mình vì chắc chắc là đk thỏa trên mọi máy, kể cả trên máy bạn.
Hay là ý bạn là thế này:
Nếu là người khác chạy file thì chắc chắn sẽ có Quit. Còn nếu bạn muốn dùng tập tin thì trước hết bạn bạn disable, sau đó vào và sửa lại code?

Nếu thế thì tôi có câu hỏi:

1. Bạn nghĩ ra cái disable macro và cho rằng người khác không biết disable macro?

2. Cứ cho là chỉ có bạn biết disable macro đi. Thay vì bỏ nhiều công ra để viết code "tuyệt chiêu" thì chỉ cần code đơn giản hơn:
Mã:
Private Sub Workbook_Open()
        If Application.Workbooks.Count = 1 Then
            Application.Quit
        Else
            ThisWorkbook.Close False
        End If
End Sub

Bởi nếu viết như bạn thì chắc chắn 200% là đk của IF thỏa. Vậy thì bầy trò
Mã:
Dim SeriesNumber As String, HDD As String
    SeriesNumber = "202020202020202020202020563534484b463651"
    HDD = "2073004635"
    IF ...

để làm gì cho tốn điện nước?
 
Upvote 0
Tôi không hiểu được ý tưởng của bạn.
Nếu code là thế thì ngay cả bạn bạn cũng không thể xem được tập tin của mình vì chắc chắc là đk thỏa trên mọi máy, kể cả trên máy bạn.
Hay là ý bạn là thế này:
Nếu là người khác chạy file thì chắc chắn sẽ có Quit. Còn nếu bạn muốn dùng tập tin thì trước hết bạn bạn disable, sau đó vào và sửa lại code?

Nếu thế thì tôi có câu hỏi:

1. Bạn nghĩ ra cái disable macro và cho rằng người khác không biết disable macro?

2. Cứ cho là chỉ có bạn biết disable macro đi. Thay vì bỏ nhiều công ra để viết code "tuyệt chiêu" thì chỉ cần code đơn giản hơn:
Mã:
Private Sub Workbook_Open()
        If Application.Workbooks.Count = 1 Then
            Application.Quit
        Else
            ThisWorkbook.Close False
        End If
End Sub

Bởi nếu viết như bạn thì chắc chắn 200% là đk của IF thỏa. Vậy thì bầy trò
Mã:
Dim SeriesNumber As String, HDD As String
    SeriesNumber = "202020202020202020202020563534484b463651"
    HDD = "2073004635"
    IF ...

để làm gì cho tốn điện nước?

Giả sử rằng VBA đã được khóa và không xem gì được trong code (thực ra thì những cao thủ ai cũng thể xem được cho dù nó có Unviewable), thì code của em được hiểu như sau:

1) Dùng code lấy Series và HDD chạy trên máy của chính em sử dụng

2) Copy 2 cái series đó vào trong code

3) Chạy thủ tục kiểm tra trên máy, tức là chạy cái code để lấy Series và HDD, nếu số đó trùng với số trong code thì cho mở máy, không thì thoát.

Đương nhiên máy của em thì mở vô tư vì điều kiện đúng. Qua máy khác không sử dụng được vì khó có thể có số trùng đến 2 hoặc 3 series. Thế thôi.

Bởi nếu viết như bạn thì chắc chắn 200% là đk của IF thỏa. Vậy thì bầy trò
Mã:
Dim SeriesNumber As String, HDD As String
    SeriesNumber = "202020202020202020202020563534484b463651"
    HDD = "2073004635"
    IF ...

để làm gì cho tốn điện nước?

Làm sao mà thỏa được Thầy? Thử một điều kiện không trùng xem, nó có thỏa được hay không?
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn các bạn nhiệt tình giúp đỡ, mình tìm hiểu ra rồi ^.^

Cái file của bạn nên là như vầy mới gọi là tương đối chính xác:

Tại sheet của bạn có các số serri trên máy của bạn, đương nhiên vì do bạn tạo.

Tôi sẽ ẩn sheet này và thêm vào một sheet Menu nào đó. Nếu bạn đã mở được file thì bấm vô nút Hiện sheet đó lên.

Trong form, tôi sẽ lấy điều kiện đúng khi tham khảo các dữ liệu trong bảng series trong sheet của bạn.

Trên form đó thôi thể hiện 2 nút, 1 nút lấy dữ liệu từ máy tính của người đang sử dụng, sau khi lấy dữ liệu thì bấm nút Xác nhận, nếu đúng 3 số trong bảng thì hiện sheet, không thì thôi.

Nếu ai đó cố tình Ctrl+Break, thì tôi đã có câu lệnh chặn nó lại. Nếu ai đó Disable Macro thì vào file cũng không thể xem được sheet vì tôi đã khóa workbook. Còn nếu họ mở được khóa WorkBook thì có khả năng họ mở được VBA, nên cũng không làm khó được người này.

Bạn xem file nhé!

Mọi Password đều là: HoangTrongNghia
 

File đính kèm

Upvote 0
Giả sử rằng VBA đã được khóa và không xem gì được trong code (thực ra thì những cao thủ ai cũng thể xem được cho dù nó có Unviewable), thì code của em được hiểu như sau:

Ta không bàn tới Unviewable vì đây là vấn đề không phải ai cũng biết. Nhưng "disable macro" thì 50 người biết, còn 50 người kia đi hỏi bạn bè đồng nghiệp thì cũng biết nốt. Cần gì xem và sửa code khi mà "disable macro" thì code "tèo"?

1) Dùng code lấy Series và HDD chạy trên máy của chính em sử dụng

2) Copy 2 cái series đó vào trong code


Tôi lại tưởng là cái "202020202020202020202020563534484b463651" là lấy từ trên trời.

Làm sao mà thỏa được Thầy? Thử một điều kiện không trùng xem, nó có thỏa được hay không?

Một điều kiện không trùng hay một mã không trùng? Đk hoặc thỏa hoặc không thỏa chứ đk không trùng thì khái niệm thế nào? Còn nếu là một mã không trùng thì dĩ nhiên là đk thỏa chứ sao. Vì đk là "doc_ma_dia <> SeriesNumber OR Readserienumber <> HDD"

Do tôi tưởng số là bất di bất dịch
Mã:
SeriesNumber = "202020202020202020202020563534484b463651"
    HDD = "2073004635"

nên thậm chí tôi viết "chắc chắn 200% là đk của IF thỏa"
 
Upvote 0
Mã:
SeriesNumber = "202020202020202020202020563534484b463651"
    HDD = "2073004635"

nên thậm chí tôi viết "chắc chắn 200% là đk của IF thỏa"

Chắc Thầy nhầm gì đó, đây là 2 điều kiện dùng AND hoặc OR:

IF A = a AND B = b THEN

Hoặc:

IF A <> a OR B <> b THEN

Em dùng là trùng hay khớp hay thỏa gì đó mà.

Với OR được hiểu như sau, chỉ cần 1 điều kiện không thỏa là toàn bộ không thỏa điều kiện.

Ta không bàn tới Unviewable vì đây là vấn đề không phải ai cũng biết. Nhưng "disable macro" thì 50 người biết, còn 50 người kia đi hỏi bạn bè đồng nghiệp thì cũng biết nốt. Cần gì xem và sửa code khi mà "disable macro" thì code "tèo"?

Em lấy một ví dụ, Nếu file em cho ẩn các sheet tác vụ, nếu các sheet tác vụ đó được chạy bởi một Menu tự tạo và nếu ai đó không cho chạy macro thì làm sao biết được trong trái ổi có bao nhiêu hạt được ạ?

Khi thỏa điều kiện, thì các thủ tục chạy Menu mới tạo ra, các nút lệnh mới hoạt động được. Còn không chỉ thấy cái sheet LINH TINH nằm chình ình ở ngoài chẳng làm gì được cái file cả và cũng chẳng mở được sheet nào cả!
 
Lần chỉnh sửa cuối:
Upvote 0
Chắc Thầy nhầm gì đó,

Với OR được hiểu như sau, chỉ cần 1 điều kiện không thỏa là toàn bộ không thỏa điều kiện.

Bạn học ở đâu đấy?
đk = đk1 OR đk2

"toàn bộ không thỏa điều kiện", tức đk = FALSE khi và chỉ khi CẢ HAI điều kiện đều không thỏa, tức khi và chỉ khi đk1 = FALSE VÀ đk2 = FALSE
---------------
Nhưng nếu ÍT NHẤT 1 điều kiện THỎA thì "toàn bộ THỎA điều kiện" (tôi dùng ngôn từ của bạn)

Do vậy nếu 1 đk thỏa vd. doc_ma_dia <> SeriesNumber = TRUE thì rõ ràng đk của IF = TRUE

Do tôi tưởng các số được nhập bất di bất dịch nên tôi nói là chắc chắn đk sẽ thỏa (thậm chí cả 2 sẽ thỏa chứ không chỉ một) và do vậy code
Mã:
Private Sub Workbook_Open()
    Dim SeriesNumber As String, HDD As String
    SeriesNumber = "202020202020202020202020563534484b463651"
    HDD = "2073004635"
    If doc_ma_dia <> SeriesNumber Or Readserienumber <> HDD Then
        If Application.Workbooks.Count = 1 Then
            Application.Quit
        Else
            ThisWorkbook.Close False
        End If
    End If
End Sub

LUÔN được thực hiện, và do vậy có thể rút gọn thành code của tôi cho khỏi tốn điện nước
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn học ở đâu đấy?
đk = đk1 OR đk2

"toàn bộ không thỏa điều kiện", tức đk = FALSE khi và chỉ khi CẢ HAI điều kiện đều không thỏa, tức khi và chỉ khi đk1 = FALSE VÀ đk2 = FALSE
---------------
Nhưng nếu ÍT NHẤT 1 điều kiện THỎA thì "toàn bộ THỎA điều kiện" (tôi dùng ngôn từ của bạn)

Do vậy nếu 1 đk thỏa vd. doc_ma_dia <> SeriesNumber = TRUE thì rõ ràng đk của IF = TRUE

Do tôi tưởng các số được nhập bất di bất dịch nên tôi nói là chắc chắn đk sẽ thỏa (thậm chí cả 2 sẽ thỏa chứ không chỉ một) và do vậy code
Mã:
Private Sub Workbook_Open()
    Dim SeriesNumber As String, HDD As String
    SeriesNumber = "202020202020202020202020563534484b463651"
    HDD = "2073004635"
    If [COLOR=#0000cd][B]doc_ma_dia[/B][/COLOR] [COLOR=#ff0000][B]<>[/B][/COLOR] SeriesNumber [COLOR=#ff0000][B]Or [/B][/COLOR][B][COLOR=#0000cd]Readserienumber [/COLOR][COLOR=#ff0000]<>[/COLOR][/B] HDD Then
        If Application.Workbooks.Count = 1 Then
            Application.Quit
        Else
            ThisWorkbook.Close False
        End If
    End If
End Sub

LUÔN được thực hiện, và do vậy có thể rút gọn thành code của tôi cho khỏi tốn điện nước

Em vẫn không hiểu ý của Thầy, có phải Thầy đang thắc mắc dùng OR và dùng AND?

Điều kiện mà em đặt ra là: Nếu chỉ cần 1 điều kiện KHÁC thôi (trong tổng số điều kiện) thì file đó bị THOÁT. (OR)

HOẶC em sẽ đặt điều kiện là: Nếu tất cả các đều kiện đều BẰNG thì mới cho MỞ file. (AND)

như thế em đã làm đặt điều kiện đúng rồi chứ?

============================================

Do cách đặt tên hàm của bạn đó không sát với nội dung hoặc cách sử dụng không đúng ở file gốc, em chỉ theo đó mà làm thôi à.
 
Lần chỉnh sửa cuối:
Upvote 0
Em vẫn không hiểu ý của Thầy, có phải Thầy đang thắc mắc dùng OR và dùng AND? Điều kiện mà em đặt ra là: Nếu chỉ cần 1 điều kiện KHÁC thôi (trong tổng số điều kiện) thì file đó bị THOÁT. (OR)
ĐK bạn đặt đúng rồi. Có bài viết nào tôi nói bạn đặt đk sai đâu? Cái lỗi của bạn là dùng từ không chính xác. Đk hoặc thỏa hoặc không thỏa chứ làm gì có đk trùng, đk khác. Sao bạn không dùng câu "số trùng hoặc số không trùng"? Vd. số serial Vì "đk" và "số serial" "ngược nhau"
SeriesNumber KHÁC, KHÔNG TRÙNG => đk THỎA (doc_ma_dia <> SeriesNumber = TRUE)
SeriesNumber TRÙNG => đk KHÔNG THỎA (doc_ma_dia <> SeriesNumber = FALSE)
-------------
Tất nhiên cả khi bạn dùng từ không chính xác tôi vẫn hiểu ý bạn. Chính vì thế mà trong bài #21 tôi không "đeo bám" ngôn từ. Tôi chỉ viết là đk luôn thỏa (do hiểu là số SerialNumber và HDD là bất di bất dịch, y như là hiện nay có trong code) nên tôi viết là code có thể rút gọn. Chỉ tới khi bạn viết trong bài #22: "Thử một điều kiện không trùng xem, nó có thỏa được hay không" thì mới có một loạt bài tiếp theo.

Điều kiện không trùng là gì? Là đk không thỏa hay SerialNumber KHÔNG TRÙNG, hay SerialNumber TRÙNG? Và nó ở đây là gì? Là cái "toàn bộ" như bạn viết (cái toàn bộ này khó hiểu quá, sao không viết đk "toàn bộ" hay để khỏi hiểu lầm thì nên viết: đk kép?), tức ĐK KÉP?

1. Nếu hiểu "Điều kiện không trùng" là đk KHÔNG THỎA, vd. ĐK "doc_ma_dia <> SeriesNumber" KHÔNG THỎA, tức "doc_ma_dia <> SeriesNumber = FALSE", tức "doc_ma_dia BẰNG SeriesNumber", thì dĩ nhiên NÓ, tức ĐK KÉP, vẫn có thể THỎA nếu ĐK "Readserienumber <> HDD" THỎA, tức "Readserienumber <> HDD = TRUE", tức "Readserienumber KHÁC HDD"

2. Nếu hiểu "Điều kiện không trùng" là SerialNumber KHÔNG TRÙNG thì dĩ nhiên là NÓ, tức ĐK KÉP, chắc chắn là THỎA. Vì SerialNumber KHÔNG TRÙNG tức là "doc_ma_dia KHÁC SeriesNumber", tức ĐK "doc_ma_dia <> SeriesNumber = TRUE", vậy ĐK KÉP
Mã:
doc_ma_dia <> SeriesNumber Or Readserienumber <> HDD =[COLOR=#ff0000] TRUE[/COLOR]

tức NÓ THỎA

3. Nếu hiểu "Điều kiện không trùng" là SerialNumber TRÙNG thì như điểm 1 NÓ, tức ĐK KÉP, vẫn có thể THỎA nếu ĐK "Readserienumber <> HDD" THỎA, tức "Readserienumber <> HDD = TRUE", tức "Readserienumber KHÁC HDD"
--------------
OR được hiểu như sau, chỉ cần 1 điều kiện không thỏa là toàn bộ không thỏa điều kiện.

Để chính xác tôi dịch lại thành

OR được hiểu như sau, chỉ cần 1 điều kiện không thỏa là điều kiện kép không thỏa

Cái này rõ ràng là sai. Tôi đã đưa ra 2 phát biểu. Nhắc lại:
Nếu 2 đk được kết hợp bởi toán tử OR thì:

Mã:
ĐK KÉP không thỏa khi và chỉ khi cả 2 đk thành phần đều không thỏa. KHÔNG THỎA ở đây nghĩa là đk = FALSE


Mã:
ĐK KÉP thỏa nếu ÍT NHẤT 1 trong 2 đk thành phần thỏa. THỎA ở đây có nghĩa là đk = TRUE.
 
Lần chỉnh sửa cuối:
Upvote 0
Em đã mở được file của Anh Nghĩa, Cũng chỉ để tìm cách ngăn một số người hay táy máy nghịch file thôi. Em đang áp dụng để bảo vệ cho bảng tính Lương của Công ty thôi. Em xin hỏi ngoài lề một chút là. Pass Unprotect Workbook của anh là HoangTrongNghia. Sau khi Unprotect sau lưu lại file, đóng File lại, mở file lại vẫn còn pass Protect Workbook. Thủ tục Mặc định đặt lại Pass protect Workbook anh đặt ở dòng Code nào vậy hay thuộc tính gì vậy?
 
Lần chỉnh sửa cuối:
Upvote 0
Em đã mở được file của Anh Nghĩa, Cũng chỉ để tìm cách ngăn một số người hay táy máy nghịch file thôi. Em đang áp dụng để bảo vệ cho bảng tính Lương của Công ty thôi. Em xin hỏi ngoài lề một chút là. Pass Unprotect Workbook của anh là HoangTrongNghia. Sau khi Unprotect sau lưu lại file, đóng File lại, mở file lại vẫn còn pass Protect Workbook. Thủ tục Mặc định đặt lại Pass protect Workbook anh đặt ở chỗ nào vậy?

Thủ tục nó nằm trong form:

Mã:
Private Sub UserForm_Initialize()
    Application.EnableCancelKey = xlDisabled
    Application.Visible = False
[COLOR=#0000cd]    [B]ThisWorkbook.Unprotect "[/B][/COLOR][COLOR=#ff0000][B]HoangTrongNghia[/B][/COLOR][COLOR=#0000cd][B]"[/B][/COLOR]
    With Sheets("serifile")
        Serialnumber = .Range("D2").Value
        Computername = .Range("D3").Value
        HDD = .Range("D6").Value
        .Visible = xlSheetVeryHidden
    End With
[COLOR=#0000cd]    [B]ThisWorkbook.Protect "[/B][/COLOR][COLOR=#ff0000][B]HoangTrongNghia[/B][/COLOR][COLOR=#0000cd][B]", Structure:=True[/B][/COLOR]
End Sub

Và thủ tục nằm trong sheet MENU:

Mã:
Private Sub CommandButton1_Click()
[COLOR=#0000cd][B]    ThisWorkbook.Unprotect "[/B][/COLOR][COLOR=#ff0000][B]HoangTrongNghia[/B][/COLOR][COLOR=#0000cd][B]"[/B][/COLOR]
    Sheets("serifile").Visible = xlSheetVisible
    Sheets("serifile").Select
[COLOR=#0000cd][B]    ThisWorkbook.Protect "[/B][/COLOR][COLOR=#ff0000][B]HoangTrongNghia[/B][/COLOR][COLOR=#0000cd][B]", Structure:=True[/B][/COLOR]
End Sub

Lưu ý, trước khi thay đổi password, phải đảm bảo là Workbook đã được mở khóa, sau đó mới thay đổi pass mới trong code nhé!
 
Upvote 0
Cái file của bạn nên là như vầy mới gọi là tương đối chính xác:

Tại sheet của bạn có các số serri trên máy của bạn, đương nhiên vì do bạn tạo.

Tôi sẽ ẩn sheet này và thêm vào một sheet Menu nào đó. Nếu bạn đã mở được file thì bấm vô nút Hiện sheet đó lên.

Trong form, tôi sẽ lấy điều kiện đúng khi tham khảo các dữ liệu trong bảng series trong sheet của bạn.

Trên form đó thôi thể hiện 2 nút, 1 nút lấy dữ liệu từ máy tính của người đang sử dụng, sau khi lấy dữ liệu thì bấm nút Xác nhận, nếu đúng 3 số trong bảng thì hiện sheet, không thì thôi.

Nếu ai đó cố tình Ctrl+Break, thì tôi đã có câu lệnh chặn nó lại. Nếu ai đó Disable Macro thì vào file cũng không thể xem được sheet vì tôi đã khóa workbook. Còn nếu họ mở được khóa WorkBook thì có khả năng họ mở được VBA, nên cũng không làm khó được người này.

Bạn xem file nhé!

Mọi Password đều là: HoangTrongNghia
Cho mình hỏi thêm: có thể viết code chỉ đăng nhập 1 lần được ko, những lần khác mở file lên thì ko cần đăng nhập...Còn nếu copy qua máy khác thì phải đăng nhập lại...
 
Upvote 0
Thủ tục nó nằm trong form:

Mã:
Private Sub UserForm_Initialize()
    Application.EnableCancelKey = xlDisabled
    Application.Visible = False
[COLOR=#0000cd]    [B]ThisWorkbook.Unprotect "[/B][/COLOR][COLOR=#ff0000][B]HoangTrongNghia[/B][/COLOR][COLOR=#0000cd][B]"[/B][/COLOR]
    With Sheets("serifile")
        Serialnumber = .Range("D2").Value
        Computername = .Range("D3").Value
        HDD = .Range("D6").Value
        .Visible = xlSheetVeryHidden
    End With
[COLOR=#0000cd]    [B]ThisWorkbook.Protect "[/B][/COLOR][COLOR=#ff0000][B]HoangTrongNghia[/B][/COLOR][COLOR=#0000cd][B]", Structure:=True[/B][/COLOR]
End Sub

Và thủ tục nằm trong sheet MENU:

Mã:
Private Sub CommandButton1_Click()
[COLOR=#0000cd][B]    ThisWorkbook.Unprotect "[/B][/COLOR][COLOR=#ff0000][B]HoangTrongNghia[/B][/COLOR][COLOR=#0000cd][B]"[/B][/COLOR]
    Sheets("serifile").Visible = xlSheetVisible
    Sheets("serifile").Select
[COLOR=#0000cd][B]    ThisWorkbook.Protect "[/B][/COLOR][COLOR=#ff0000][B]HoangTrongNghia[/B][/COLOR][COLOR=#0000cd][B]", Structure:=True[/B][/COLOR]
End Sub

Lưu ý, trước khi thay đổi password, phải đảm bảo là Workbook đã được mở khóa, sau đó mới thay đổi pass mới trong code nhé!
Góp ý tý xíu: Bạn nên cho cái Form đăng nhập luôn nổi trên mà hình cho đến khi Unload, vì khi file được mở bạn cho Excel "biến" rồi, nếu ta đang mở nhiều cửa sổ chương trình và vô tình bấm ra ngoài Form thì "lạc" mất Form.
 
Upvote 0
Cho mình hỏi thêm: có thể viết code chỉ đăng nhập 1 lần được ko, những lần khác mở file lên thì ko cần đăng nhập...Còn nếu copy qua máy khác thì phải đăng nhập lại...

Tôi không hiểu ý bạn là gì. Nếu máy bạn đăng nhập thì không cần phải kiểm tra hoặc kiểm tra chỉ lần đầu, còn máy khác thì kiểm tra? Chi cho mất công vậy? Nếu vậy thì làm luôn cái mà tôi đề nghị đầu tiên cho rồi (Workbook_Open), khỏi phải "fơm fiếc" gì cho mệt.

Góp ý tý xíu: Bạn nên cho cái Form đăng nhập luôn nổi trên mà hình cho đến khi Unload, vì khi file được mở bạn cho Excel "biến" rồi, nếu ta đang mở nhiều cửa sổ chương trình và vô tình bấm ra ngoài Form thì "lạc" mất Form.

Anh an tâm đi, khi form này load lên, tất cả các cửa sổ của excel biến mất hết, chẳng có cái nào còn đâu mà lo. Ta đang làm gì đó thì ta tự biết, nếu lạc thì kiếm thôi kakaka
 
Upvote 0
Anh an tâm đi, khi form này load lên, tất cả các cửa sổ của excel biến mất hết, chẳng có cái nào còn đâu mà lo. Ta đang làm gì đó thì ta tự biết, nếu lạc thì kiếm thôi kakaka

Ai nói cửa sổ Excel, giả sử mình đang mở nhiều cửa sổ khác như Internet, word, pdf ... Đã có Pass thì phải chuyên nghiệp một tí để xứng tầm với sự bảo mật đó chớ. he he
 
Upvote 0
Ai nói cửa sổ Excel, giả sử mình đang mở nhiều cửa sổ khác như Internet, word, pdf ... Đã có Pass thì phải chuyên nghiệp một tí để xứng tầm với sự bảo mật đó chớ. he he

Muốn bao nhiêu cửa sổ thì bao! Thêm vào 2 dòng đỏ trong ThisWorkbook cái sự kiện này là được!

Mã:
Private Sub Workbook_Open()
[COLOR=#ff0000]    CreateObject("Shell.Application").MinimizeAll
    Application.Wait Now + TimeValue("00:00:01")[/COLOR]
    frmPass.Show
End Sub
 
Upvote 0
Muốn bao nhiêu cửa sổ thì bao! Thêm vào 2 dòng đỏ trong ThisWorkbook cái sự kiện này là được!

Mã:
Private Sub Workbook_Open()
[COLOR=#ff0000]    CreateObject("Shell.Application").MinimizeAll
    Application.Wait Now + TimeValue("00:00:01")[/COLOR]
    frmPass.Show
End Sub

Không ăn thua bạn ơi! vẫn bị chìm Form khi bấm qua cửa sổ khác.

Thử dùng em này nhé:

Thêm code vào đầu Module:

Mã:
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, _
                                                    ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, _
                                                    ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Public Sub SetTopmostWindow(ByVal hwnd As Long, Optional topmost As Boolean = True)
    SetWindowPos hwnd, IIf(topmost, -1, -2), 0, 0, 0, 0, 3
End Sub

Thêm vào Form:

UserForm_Initialize:
Mã:
SetTopmostWindow Application.hwnd
UserForm_Terminate:
Mã:
SetTopmostWindow Application.hwnd, False
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
 Public Function TimeVn(t As String) As String Dim i As Integer
 Dim l As String
 Dim r As String
 i = InStr(1, t, ":")
 l = Left(t, i - 1)
 r = Mid(t, i)
 i = CInt(l)
 j = (i + 7) Mod 24
 If i < j Then
 TimeVn = CStr(j) & r
 Else
 TimeVn = CStr(j) & r & "+"
 End If
 End Function
 Public Function TimeVn1(d As Date) As String
 Dim t As String
 Dim i As Integer
 Dim l As String
 Dim r As String
 t = Format(d, "hh:mm:ss")
 i = InStr(1, t, ":")
 l = Left(t, i - 1)
 r = Mid(t, i)
 i = CInt(l)
 j = (i + 7) Mod 24
 If i < j Then
 TimeVn1 = CStr(j) & r
 Else
 TimeVn1 = CStr(j) & r & "+"
 End If
 End Function
Sub GetBoardSerial()
Set WMI = GetObject("winmgmts:\\.\root\cimv2")
Set objs = WMI.ExecQuery("Select * from Win32_BaseBoard")
For Each obj In objs
Sheet1.[B1].Value = obj.SerialNumber
Next
 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
 Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
 For Each objItem In colItems
 Sheet1.[B2].Value = objItem.ProcessorId
 Next
  Dim fso As Object, Drv As Object
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set Drv = fso.GetDrive(Environ("SystemDrive"))
              With Drv
                  If .IsReady Then
                      DriveSerial = Abs(.SerialNumber)
                  Else
                      DriveSerial = -1
                  End If
              End With
             
              Set Drv = Nothing
              Set fso = Nothing
              Sheet1.[B3].Value = DriveSerial
     End Sub
Có thể chèn đoạn code nào để thêm một ô B4 chưa thời gian tại thời điểm bấm để lấy số seri của máy không vậy các bạn?
Mình muốn sau 1 ngày, thì giá trị trong ô B1-2-3 không còn giá trị nữa, mà phải bấm nút lấy lại seri lần nữa (mục đích là lấy lại thời gian ở ô B4).
Tks.
 
Lần chỉnh sửa cuối:
Upvote 0
file cuối cùng đâu up lên mình xem với.. hay quá đi!
 
Upvote 0
Nói chung là bạn chỉ cần cái này (đặt trong module của Thisworkbook):

Mã:
Option Explicit

Private Sub Workbook_Open()
    Dim SeriesNumber As String, HDD As String
    SeriesNumber = "202020202020202020202020563534484b463651"
    HDD = "2073004635"
    If doc_ma_dia <> SeriesNumber Or Readserienumber <> HDD Then
        If Application.Workbooks.Count = 1 Then
            Application.Quit
        Else
            ThisWorkbook.Close False
        End If
    End If
End Sub

Các anh cho em hỏi. Nếu muốn bổ sung để cho 2 máy chạy được - thêm SeriesNumber = " mã đĩa 2" và HDD = "mã ổ cứng 2". Thì sửa thế nào ạ
 
Upvote 0
Em sửa code như sau thì chạy được nhưng có thông báo lỗi:
Anh chị chỉ giúp em với ạ.
Mã:
Private Sub Workbook_Open()
    Dim madia As String, mamay As String
	Dim Arrdia
	Dim Arrmay
	Arrdia = Array("S3PGE65Q","S314J90H241608")
	Arrmay = Array("BFEBFBFF00040651","BFEBFBFF000406E3")
   	For Each madia in Arrdia
		For Each mamay in Arrmay
    If doc_ma_dia <> madia Or doc_ma_may <> mamay Then
        If Application.Workbooks.Count = 1 Then
            Application.Quit
        Else
            ThisWorkbook.Close False
        End If
    End If
		Next
	Next	
End Sub

1.png
 
Upvote 0
Web KT

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

Back
Top Bottom