[英]Excel VBA: delete row after specific password is entered
我有一張床單,上面裝有預訂號和相關數據。 在VBA中,我已經准備好刪除與其相關行的預訂號的代碼。
這些預訂號碼中的某些號碼不應被允許刪除,我希望使用密碼(與此預訂相關)才能刪除它。
這是我的刪除代碼:
Private Sub btn_verwijderen_Click()
' try to retrieve the product by ID
Dim rngIdList As Range, rngId As Range
Set rngIdList = ActiveSheet.Range([B2], [B2].End(xlDown))
Set rngId = rngIdList.Find(Me.txtBookingnr, LookIn:=xlValues)
If rngId Is Nothing Then
' bookingnumber is not found
Exit Sub
Else
If MsgBox("you are about to delete: " & "Booking:" & Me.txtBookingnr & ". Are you sure?", vbYesNo) = vbYes Then
If MsgBox("You can't undo this process. Sure to delete?", vbYesNo) = vbYes Then
Sheets("Invoer").Range("Tabel133").Find(Me.txtBookingnr.Value).Delete
Sheets("Gastenlijst_vertrekkers").Columns(2).Find(Me.txtBookingnr, , , , 1).EntireRow.Delete
Sheets("Gastenlijst").Columns(2).Find(Me.txtBookingnr, , , , 1).EntireRow.Delete
MsgBox "Booking is deleted. Refresh update now (automatically)"
Call updatePlanning_Click
Call btn_cancel_Click
Else
MsgBox "Nothing changed"
End If
End If
End If
End Sub
現在,此代碼適用於允許用戶刪除的行。 但是對於用戶無法刪除的號碼,應使用他們需要填寫的密碼加以保護,以便正式刪除該行。
因此,例如:
Column B = Booking#
Column C = Initials
Column D = Surname
Column E = Checkin date
Column F = Checkout date
etc. etc. etc.
假設預訂號碼:1800123被取消,需要從列表中刪除。 我按下按鈕:刪除(btn_verwijderen),我將得到第一個MsgBox。 點擊“是”后,應該有一條新消息要求輸入密碼。 輸入正確的密碼后,應刪除預訂。 但是密碼與特定的預訂有關。
希望你們中的一些人知道如何實現這一目標。 在此先感謝您的幫助。
這是一些偽代碼,說明了一種方法。 在主子目錄中,您需要說明要刪除的預訂。 然后,您需要檢查預訂是否需要密碼。
Password
功能將向您的子級返回TRUE
(可以刪除)或FALSE
(不能刪除)。 因此,你刪除測試需要基於解決此功能,其在示出的輸出Sub Example
。
功能Password
輸出可能性如下:
TRUE
:如果數組var
中不存在要刪除的預訂號(不需要密碼) TRUE
:如果陣列中確實存在要刪除的預訂號碼, 並且輸入了正確的密碼 FALSE
:如果陣列中確實存在要刪除的預訂號, 並且輸入了錯誤的密碼 我建議您按原樣測試此代碼,以了解其工作原理。 然后將其構建到您的主子目錄中。 您實際上只需要修改函數中的數組值。 大部分工作將圍繞此函數的結果構建您的delete語句
注意,我正在將預訂號2
手動傳遞給該功能。 您需要將2
交換為variable
預訂號。
Option Explicit
Sub Example()
If Password(2) Then 'If function returns TRUE
MsgBox "Add Delete Code Here"
Else 'If function returns FALSE
MsgBox "Incorrect Password"
End If
End Sub
Private Function Password(Booking As Long) As Boolean
Dim var As Variant, i As Long, PW As String
var = [{1, 2, 3, 4, 5; "Password1", "Password2", "Password3", "Password4", "Password5"}]
For i = LBound(var, 1) To UBound(var, 2)
If Booking = var(1, i) Then
PW = Application.InputBox("Password required to delete booking: " & Booking, "Password Protected", Type:=2)
If PW = var(2, i) Then
Password = True
Exit Function
Else
Password = False
Exit Function
End If
End If
Next i
Password = True
End Function
具有VBA
知識的任何人都可以查看使用此方法存儲的所有密碼。 您可以通過密碼保護VBA Project
來加強安全性,但是,這仍然不是100%的虛擬證明。 在此站點上可以找到很多方法,它們詳細介紹了如何破解這些密碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.