【问题标题】:Excel VBA: delete row after specific password is enteredExcel VBA:输入特定密码后删除行
【发布时间】:2018-11-27 14:33:51
【问题描述】:

我有一张填写了预订编号和相关数据的表格。在 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。点击“是”后,应该会出现一条要求输入密码的新消息。输入正确密码后,预订应被删除。但是密码与特定的预订相关。

希望你们中的一些人知道如何实现这一目标。 提前感谢您的帮助。

【问题讨论】:

  • 您希望每一行(假设每一行对应一个唯一的预订)都有自己的密码?
  • 不,只有某些唯一的预订号码。说出 10 个预订号码。

标签: excel vba passwords


【解决方案1】:

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

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

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

  • TRUE:如果要删除的预订号存在于数组var(无需密码)中
  • TRUE:如果要删除的预订号确实存在于数组中并且输入了正确的密码
  • FALSE: 如果要删除的预订号码确实存在于数组中并且输入了错误密码

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

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

【讨论】:

  • 目前正在添加测试代码。尽快通知您
  • 查看我的评论(作为答案?)
猜你喜欢
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多