Xin hỏi cách chèn code vào VBA để xóa file khi nhập sai pass n lần? (2 người xem)

Liên hệ QC

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

taieuro2

Thành viên mới
Tham gia
29/2/12
Bài viết
20
Được thích
1
Mình tìm được trên 1 website có hướng dẫn cách xóa file khi người khác cố tình mở file có pass mà lại nhập sai pass.
Nhưng theo kiến thức nông cạn thì mình thấy hình như code dưới đây chỉ nhập sai 1 lần là nó xóa mất file luôn!
Mã:
[COLOR=#FFFFFF][FONT=Arial]Private Sub Workbook_Open()[/FONT][/COLOR]
[COLOR=#000000][FONT=Arial]Dim strPwd As String[/FONT]
[FONT=Arial]strPwd = Application.InputBox("Enter password")[/FONT]
[FONT=Arial]'Enter your password here[/FONT]
[FONT=Arial]If strPwd <> "Mahesh123" Then[/FONT]
[FONT=Arial]Application.DisplayAlerts = False[/FONT]
[FONT=Arial]ThisWorkbook.ChangeFileAccess xlReadOnly[/FONT]
[FONT=Arial]Kill ThisWorkbook.FullName[/FONT]
[FONT=Arial]ThisWorkbook.Close False[/FONT]
[FONT=Arial]End If[/FONT][/COLOR]
Mình mong các Pro chỉ giúp cách làm sao thay đổi được số lần nhập sai pass mới cho phép xóa file!
Và cách chèn code vào file để khi mở là nó hỏi pass, nhập sai 3 lần mới xóa!
Và khi xóa thì nó xóa vào đâu, có cách phục hồi được không? (nếu xóa vào recycle bin thì mình biết cách lấy lại rồi --=0)
Xin chân thành cảm ơn các Pro!​
 
Mình tìm được trên 1 website có hướng dẫn cách xóa file khi người khác cố tình mở file có pass mà lại nhập sai pass.
Nhưng theo kiến thức nông cạn thì mình thấy hình như code dưới đây chỉ nhập sai 1 lần là nó xóa mất file luôn!
Mã:
Private Sub Workbook_Open()
Dim strPwd As String
strPwd = Application.InputBox("Enter password")
'Enter your password here
If strPwd <> "Mahesh123" Then
Application.DisplayAlerts = False
ThisWorkbook.ChangeFileAccess xlReadOnly
Kill ThisWorkbook.FullName
ThisWorkbook.Close False
End If
Mình mong các Pro chỉ giúp cách làm sao thay đổi được số lần nhập sai pass mới cho phép xóa file!
Và cách chèn code vào file để khi mở là nó hỏi pass, nhập sai 3 lần mới xóa!
Và khi xóa thì nó xóa vào đâu, có cách phục hồi được không? (nếu xóa vào recycle bin thì mình biết cách lấy lại rồi --=0)
Xin chân thành cảm ơn các Pro!
Bạn sửa lại code thành:
PHP:
Private Sub Workbook_Open()
    Dim strPwd As String, n As Byte
    Do
        n = n + 1
        strPwd = Application.InputBox("Enter password:")
    Loop Until strPwd = "Mahesh123" Or n = 3
    If strPwd <> "Mahesh123" Then
        Application.DisplayAlerts = False
        ThisWorkbook.ChangeFileAccess xlReadOnly
        Kill ThisWorkbook.FullName
        ThisWorkbook.Close False
    End If
End Sub
Bạn thay số 3 ở trên thành số lần tùy thích. Sau 3 lần nhập không đúng password thì file sẽ tự xóa, và bạn yên tâm là file sẽ ra đi vĩnh viễn, khỏi khôi phục (không biết sử dụng phần mềm có khôi phục được không do chưa thử).
 
Upvote 0
Đây là code dùng để xóa file nhưng file sẽ không bị xóa mãi mãi mà sẽ đưa vào Recycle Bin nên dễ dàng khôi phục lại. Kết hợp thêm code này với code 3 lần nhập pass nữa là ok
PHP:
Private Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
sFrom As String
sTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type

Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" _
(ByRef lpFileOp As SHFILEOPSTRUCT) As Long

Private Const FO_DELETE = &H3
Private Const FOF_SILENT = &H4
Private Const FOF_NOCONFIRMATION = &H10
Private Const FOF_ALLOWUNDO = &H40

Sub DeleteFileUsingAPI()

Dim oFilAPI As SHFILEOPSTRUCT
Dim lReturn As Long
Dim sFile As String ' File that needs to be deleted

sFile = "C:\ Temp\VBADUD\Hints and Tips.htm"

With oFilAPI
.wFunc = FO_DELETE
.sFrom = sFile
.sTo = vbNullChar
.fFlags = FOF_SILENT + FOF_NOCONFIRMATION + FOF_ALLOWUNDO
End With

' Use WinAPI User Defined Function
lReturn = SHFileOperation(oFilAPI)

Err_Delete:
MsgBox(Err.Number & " - " & Err.Description)
Err.Clear()
Resume Next
End Sub
Nguồn: http://vbadud.blogspot.com/2008/08/vba-send-file-to-recycle-bin.html
 
Upvote 0
Sao chèn vào nó hiện ra cả nội dung file luôn khi yêu cầu nhập pass vậy Pro?



Với lại khi nhập sai 3 lần rồi mà nó cũng không xóa file, mà lại hiện ra TB này:



Mong chỉ giúp mình!
 
Upvote 0
Đây là code dùng để xóa file nhưng file sẽ không bị xóa mãi mãi mà sẽ đưa vào Recycle Bin nên dễ dàng khôi phục lại. Kết hợp thêm code này với code 3 lần nhập pass nữa là ok
PHP:
Private Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
sFrom As String
sTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type

Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" _
(ByRef lpFileOp As SHFILEOPSTRUCT) As Long

Private Const FO_DELETE = &H3
Private Const FOF_SILENT = &H4
Private Const FOF_NOCONFIRMATION = &H10
Private Const FOF_ALLOWUNDO = &H40

Sub DeleteFileUsingAPI()

Dim oFilAPI As SHFILEOPSTRUCT
Dim lReturn As Long
Dim sFile As String ' File that needs to be deleted

sFile = "C:\ Temp\VBADUD\Hints and Tips.htm"

With oFilAPI
.wFunc = FO_DELETE
.sFrom = sFile
.sTo = vbNullChar
.fFlags = FOF_SILENT + FOF_NOCONFIRMATION + FOF_ALLOWUNDO
End With

' Use WinAPI User Defined Function
lReturn = SHFileOperation(oFilAPI)

Err_Delete:
MsgBox(Err.Number & " - " & Err.Description)
Err.Clear()
Resume Next
End Sub
Nguồn: http://vbadud.blogspot.com/2008/08/vba-send-file-to-recycle-bin.html

Vậy mình muốn xóa vĩnh viễn luôn thì đổi nội dung sao bạn!
 
Upvote 0
Mình tìm được trên 1 website có hướng dẫn cách xóa file khi người khác cố tình mở file có pass mà lại nhập sai pass.
Nhưng theo kiến thức nông cạn thì mình thấy hình như code dưới đây chỉ nhập sai 1 lần là nó xóa mất file luôn!
Mã:
[COLOR=#FFFFFF][FONT=Arial]Private Sub Workbook_Open()[/FONT][/COLOR]
[COLOR=#000000][FONT=Arial]Dim strPwd As String[/FONT]
[FONT=Arial]strPwd = Application.InputBox("Enter password")[/FONT]
[FONT=Arial]'Enter your password here[/FONT]
[FONT=Arial]If strPwd <> "Mahesh123" Then[/FONT]
[FONT=Arial]Application.DisplayAlerts = False[/FONT]
[FONT=Arial]ThisWorkbook.ChangeFileAccess xlReadOnly[/FONT]
[FONT=Arial]Kill ThisWorkbook.FullName[/FONT]
[FONT=Arial]ThisWorkbook.Close False[/FONT]
[FONT=Arial]End If[/FONT][/COLOR]
Mình mong các Pro chỉ giúp cách làm sao thay đổi được số lần nhập sai pass mới cho phép xóa file!
Và cách chèn code vào file để khi mở là nó hỏi pass, nhập sai 3 lần mới xóa!
Và khi xóa thì nó xóa vào đâu, có cách phục hồi được không? (nếu xóa vào recycle bin thì mình biết cách lấy lại rồi --=0)
Xin chân thành cảm ơn các Pro!​
Tôi có 1 vài thắc mắc
- Chắc là file của bạn "hay" lắm nên mới cần bảo mật đây? (sợ người ta "chôm" thành quả của mình)
- Nếu tôi dùng file của bạn và tôi Disable Macros thì bạn tính sao?
---------------------
Vậy nên theo ý tôi thì:
- Nếu bạn đã quá giỏi rồi thì chắc không cần phải hỏi mấy câu đơn giản này
- Nếu bạn chưa giỏi, vậy cần gì phải nghiên cứu mấy thứ này cho mất công ---> Sao không dành thời gian học hỏi những thứ có ích hơn?
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi có 1 vài thắc mắc
- Chắc là file của bạn "hay" lắm nên mới cần bảo mật đây? (sợ người ta "chôm" thành quả của mình)
- Nếu tôi dùng file của bạn và tôi Disable Macros thì bạn tính sao?
---------------------
Vậy nên theo ý tôi thì:
- Nếu bạn đã quá giỏi rồi thì chắc không cần phải hỏi mấy câu đơn giản này
- Nếu bạn chưa giỏi, vậy cần gì phải nghiên cứu mấy thứ này cho mất công ---> Sao không dành thời gian học hỏi những thứ có ích hơn?
- Mình thật sự không rành về VBA!
- Dĩ nhiên nội dung file phải rất quan trọng đối với mình, nên mới đưa ra yêu cầu bảo mật như vậy? Trong file chỉ thuần túy nội dung, chả có phép tính hay gì gì ghê gớm! Nhưng 1 lần nữa, nội dung nó sống còn với mình! Một lúc nào đó, các bạn cũng sẽ gặp phải tình huống như vậy!
- Nếu vấn đề disable macro mà mình không thực hiện được các yêu cầu trên thì lại phải hỏi các cao nhân tiếp /-*+/ Làm sao vượt qua được nó?
- Như những điều mình đã nói ở trên, mình nghĩ nghiên cứu điều này sao lại mất công chứ!
Nhờ các Bạn giúp mình/-*+/
 
Upvote 0
Xóa vĩnh viễn thì dùng Kill là ok rồi bạn, chỉ là xóa tạm thì mới phức tạp thôi.
Sao mình gắn kết 2 đoạn code lại thì nó phát sinh lỗi sau:
346798d621a6bcb53acfd555aba3c6a0_41909126.pic3.jpg


Bạn xem giúp mình sai chỗ nào vậy?!
 
Upvote 0
- Mình thật sự không rành về VBA!
- Dĩ nhiên nội dung file phải rất quan trọng đối với mình, nên mới đưa ra yêu cầu bảo mật như vậy? Trong file chỉ thuần túy nội dung, chả có phép tính hay gì gì ghê gớm! Nhưng 1 lần nữa, nội dung nó sống còn với mình! Một lúc nào đó, các bạn cũng sẽ gặp phải tình huống như vậy!
- Nếu vấn đề disable macro mà mình không thực hiện được các yêu cầu trên thì lại phải hỏi các cao nhân tiếp /-*+/ Làm sao vượt qua được nó?
- Như những điều mình đã nói ở trên, mình nghĩ nghiên cứu điều này sao lại mất công chứ!
Nhờ các Bạn giúp mình/-*+/
Dám cá với bạn rằng trong Excel không có cách nào bảo mật được đâu
Dù bạn có làm bất cứ cái gì (kể cả chuyển file Excel thành file EXE) người ta vẫn phá "banh ta long" file của bạn 1 cách dễ dàng
Nói xin lỗi, dù file của bạn có đặt pass khóa luôn code VBA thì tôi cũng có thể mở nó trong vòng 5s ---> Mà kỹ thuật "phá hoại" này chẳng có gì lạ đối với các thành viên GPE đâu
Thế nên tôi khuyên bạn đừng mất công với cái chuyện không thể kia nữa
------------------------------------------
Còn như bạn nói file của bạn quan trọng, sợ người ta phá, vậy sao không dùng tính năng có sẵn của Excel? Password Open file của Excel, cứ thế mà xài, chẳng phải viết thêm gì cả
Đương nhiên các ý kiến trên cũng chỉ là ý kiến cá nhân (qua kinh nghiệm làm việc trên Excel)... Còn bạn, nếu thích nghiên cứu thì cứ... TÙY
 
Lần chỉnh sửa cuối:
Upvote 0
Sao mình gắn kết 2 đoạn code lại thì nó phát sinh lỗi sau:
346798d621a6bcb53acfd555aba3c6a0_41909126.pic3.jpg


Bạn xem giúp mình sai chỗ nào vậy?!

Bạn làm thế này

Tạo 1 module rồi chép hết đoạn code dưới đây vào
PHP:
Private Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
sFrom As String
sTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type

Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" _
(ByRef lpFileOp As SHFILEOPSTRUCT) As Long

Private Const FO_DELETE = &H3
Private Const FOF_SILENT = &H4
Private Const FOF_NOCONFIRMATION = &H10
Private Const FOF_ALLOWUNDO = &H40

Sub DeleteFileUsingAPI(sFile As String)

Dim oFilAPI As SHFILEOPSTRUCT
Dim lReturn As Long
' File that needs to be deleted

With oFilAPI
.wFunc = FO_DELETE
.sFrom = sFile
.sTo = vbNullChar
.fFlags = FOF_SILENT + FOF_NOCONFIRMATION + FOF_ALLOWUNDO
End With

' Use WinAPI User Defined Function
lReturn = SHFileOperation(oFilAPI)

Err_Delete:
MsgBox ("Sai Password")
End Sub

Sau đó vào ThisWorkbook dùng đoạn code này
PHP:
Private Sub Workbook_Open()
    Dim strPwd As String, n As Byte
    Do
        n = n + 1
        strPwd = Application.InputBox("Enter password:")
    Loop Until strPwd = "Mahesh123" Or n = 3
    If strPwd <> "Mahesh123" Then
        Application.DisplayAlerts = False
        ThisWorkbook.ChangeFileAccess xlReadOnly
        DeleteFileUsingAPI ThisWorkbook.FullName
        ThisWorkbook.Close False
    End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
@kyo: làm theo bạn là OK rồi! Tuy còn 2 điều này:
1. làm sao khi hiện bản nhập pass nó không hiển thị nội dung file sau Bảng thông báo nhập pass.
2. Đoạn code nào giúp xóa mất, không vào recycle bin
Xin cám ơn bạn!

p/s: @ndu96081631: Mình chân thành cám ơn nhưng ý kiến chân tình của Pro. Ủng hộ mình phiêu lưu 1 chuyến /-*+/
 
Upvote 0
@kyo: làm theo bạn là OK rồi! Tuy còn 2 điều này:
1. làm sao khi hiện bản nhập pass nó không hiển thị nội dung file sau Bảng thông báo nhập pass.
2. Đoạn code nào giúp xóa mất, không vào recycle bin
Xin cám ơn bạn!

p/s: @ndu96081631: Mình chân thành cám ơn nhưng ý kiến chân tình của Pro. Ủng hộ mình phiêu lưu 1 chuyến /-*+/
Với vấn đề 2, bạn dùng Kill là xóa mất luôn, không có vào recycle bin đâu (bạn nghiaphuc đã chỉ bạn ở trên rồi mà)
Với vấn đề 1, bạn thêm vào 2 dòng này (code này mình trích lại từ của bạn nghiaphuc cho bạn, nếu bạn muốn áp dụng cho code có recycle bin thì bạn cũng thêm tương tự, rất dễ dàng thôi)
Private Sub Workbook_Open()
Dim strPwd As String, n As Byte
Application.Visible = False
Do
n = n + 1
strPwd = InputBox("Enter password:")
Loop Until strPwd = "123" Or n = 3
Application.Visible = True
If strPwd <> "123" Then
Application.DisplayAlerts = False
ThisWorkbook.ChangeFileAccess xlReadOnly
Kill ThisWorkbook.FullName
ThisWorkbook.Close False
End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Với vấn đề 2, bạn dùng Kill là xóa mất luôn, không có vào recycle bin đâu (bạn nghiaphuc đã chỉ bạn ở trên rồi mà)
Với vấn đề 1, bạn thêm vào 2 dòng này (code này mình trích lại từ của bạn nghiaphuc cho bạn, nếu bạn muốn áp dụng cho code có recycle bin thì bạn cũng thêm tương tự, rất dễ dàng thôi)
Mình làm như bạn chỉ đối với excel 2003 thì như ý! Còn với 2007 và 2010 thì không được! Mặc dù enable Macro rồi, nó bảo nhập pass rồi, nhưng nhập sai nó k xóa file đó!
Vậy có phải office khác nhau thì code khác nhau k vậy kyo? Giúp mình trót nhé :d
 
Upvote 0
Mình làm như bạn chỉ đối với excel 2003 thì như ý! Còn với 2007 và 2010 thì không được! Mặc dù enable Macro rồi, nó bảo nhập pass rồi, nhưng nhập sai nó k xóa file đó!
Vậy có phải office khác nhau thì code khác nhau k vậy kyo? Giúp mình trót nhé :d

Nhầm một chút, xin lỗi bạn, code trên không có lệnh Kill thì sao nó xóa file được :D:D Kyo đã sửa lại ở bài trên rồi, bạn xem lại nhé.
 
Upvote 0
p/s: @ndu96081631: Mình chân thành cám ơn nhưng ý kiến chân tình của Pro. Ủng hộ mình phiêu lưu 1 chuyến /-*+/[/QUOTE]

Theo mình nghĩ ý kiến ndu96081631 bạn nên quan tâm đúng mức không nên phiêu lưu sẽ tra giá lớn đấy bạn ah. Tính năng set pass của Excel là tuyệt rồi nếu pass đủ mạnh thì là thách thức vô cùng to lớn đối với bất cứ phần mềm dò tìm pass để hack.
 
Upvote 0
Nhầm một chút, xin lỗi bạn, code trên không có lệnh Kill thì sao nó xóa file được :D:D Kyo đã sửa lại ở bài trên rồi, bạn xem lại nhé.
Quên nữa! Mình tìm trên GPE các bài viết, ẩn pass nhập thành dấu "*" và tìm được bài HD của Bạn ndu96081631 như sau:
1-Trong form nhập pass mình có thể cho phép nhập lại nếu pass sai, sau 3 lần nhập vẫn sai ta có thể thoát ứng dụng luôn

Cũng có thể là vầy:


Private iCount As Long
Private Sub CmdPassCancel_Click()
ThisWorkbook.Close True
End Sub


Private Sub CmdPassOk_Click()
If TxtPass <> "102011" Then
iCount = iCount + 1
If iCount >= 3 Then CmdPassCancel_Click
MsgBox "Ban da nhap sai password " & iCount & " lan" & vbLf & _
"Vui long nhap lai!"
Me.TxtPass.Text = ""
Me.TxtPass.SetFocus
Else
Unload Me
End If
End Sub
Biến iCount để đếm số lần nhập sai ---> 3 lần nhập sai xem như thoát luôn


2- ký tự nhập vào không thể hiện trên textbox mà có thể là dấu chấm hay sao gì đấy.

TextBox có thuộc tính PasswordChar chuyên dùng cho việc này ---> Đặt thuộc tính PasswordChar = * là xong!
-----------------------------
Lưu ý: Không nên dùng Application.Quit vì nó sẽ đóng toàn bộ các file Excel đang mở đấy ---> Chỉ nên dùng Thisworkbook.Close là đủ rồi (đóng file của mình thôi)
-----------------------------
Tôi chỉ mới test sơ qua, chưa biết có gì trục trặc hay không... bạn test lại nhé
Vậy gán thế nào để ký tự của pass nhập vào nó hiện ra dấu "*" vậy bạn? Phiền bạn thêm lần nữa nhé /-*+/

Ái chà! Còn 1 cái nữa mà mình quên để ý (Mừng wa' nên wen --=0) Phần thông báo khi nhập sai pass nó không xuất hiện! Vận dụng code của Bạn ndu96081631 thế nào vào phần code trong file mình để nó báo số lần nhập sai vậy ah? Mình xin cảm ơn mọi người trước nha!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Theo như lời anh em tò mò ko biết file này có thể mở được ko.
https://www.mediafire.com/?dljhef89sdlfy96
Tại vì ở công ty có 1 anh cho em 1 file và thách thức tất cả mọi người mà mở (View Code) được thì anh ta sẻ ko khóa nữa. em thì bó tay rồi.
Anh có cách nào mở ko anh ^^ Thanks
Theo như Thầy Ndu thì mở trong vòng ... 5s. Bảo mật trên excel là điều vô vọng( như windown mà còn crack được thì nói chi tới excel )
 
Upvote 0
Web KT

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

Back
Top Bottom