我有一张床单,上面装有预订号和相关数据。在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。点击“是”后,应该有一条新消息要求输入密码。输入正确的密码后,应删除预订。但是密码与特定的预订有关。
希望你们中有些人知道如何实现这一目标。 预先感谢您的帮助。
答案 0 :(得分:0)
以下是一些伪代码,它们说明了一种方法。在主子目录中,您需要说明要删除的预订。然后,您需要检查预订是否需要密码。
函数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%的虚拟证明。在此站点上可以找到很多方法,它们详细介绍了如何破解这些密码。