簡體   English   中英

Excel VBA:輸入特定密碼后刪除行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM