Excel VBA:输入特定密码后删除行



我有一张表格,里面填写了预订号和相关数据。在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

现在,此代码适用于用户IS允许删除的行。但对于用户不能删除的数字,应该由他们需要填写的密码保护,以便正式删除该行。

例如:

Column B = Booking#
Column C = Initials
Column D = Surname
Column E = Checkin date
Column F = Checkout date
etc. etc. etc.

假设预订号码:1800123被取消,需要从列表中删除。我按下按钮:Remove(btn_verwijderen(,我将获得第一个MsgBox。点击YES后,应该会有一条新消息要求输入密码。输入正确的密码后,应删除预订。但密码与特定的预订有关。

希望你们中的一些人知道如何做到这一点。提前感谢您的帮助。

下面是一些伪代码,说明了一种方法。在您的主要子中,您需要说明要删除的预订。然后,您需要检查该预订是否需要密码。

函数Password将向您的sub返回TRUE(可以删除(或FALSE(不可以删除(。因此,您的删除测试需要基于此函数的输出,如Sub Example所示。

函数Password的输出可能性如下:

  • TRUE:如果要删除的预订号码在阵列var中不存在(不需要密码(
  • TRUE:如果要删除的预订号在数组中是否存在,并且输入了正确的密码
  • FALSE:如果要删除的预订号在数组中是否存在并且输入了错误的密码

我建议您按原样测试此代码,以了解其工作原理。然后将其构建到您的main sub中。您实际上只需要修改函数中的数组值。大部分工作将围绕这个函数的结果构建删除语句

请注意,我正在手动将预订编号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%的伪证明。在这个网站上可以找到一些方法,详细介绍如何破解这些密码

最新更新