如何使用access vba限制从列表框中删除指定的项目

时间:2014-02-26 21:49:18

标签: vba access-vba

我有一个包含18个项目的列表框。单击“删除”按钮可以从列表框中删除所选项目。如何阻止用户删除我指定的某些项目?

Private Sub cmdDelete_Click()
    Dim i As Integer

    With Me.listbox1
        For i = .ListCount - 1 To 0 Step -1
            If .Selected(i) = True Then
                .RemoveItem i
            End If
        Next i
    End With
End Sub

1 个答案:

答案 0 :(得分:2)

您可以将值存储在表格中吗?然后你可以在表格中有一个列,指定是否可以删除该字段,这很容易构建到你的VBA中。

编辑以获得进一步说明:

列表框是否未绑定(即没有特定字段作为其数据源)。

创建一个表,其中包含ID列(作为自动编号),要显示在列表框中的值(作为文本框),以及最后一列,您可以勾选是或否(作为布尔值或是/ no field)。 E.g。

ID     Values                Allow deletion?
1      Example               Yes
2      Another example       No
3      Yes another example   Yes

在列表框的rowsource中,选择该表。

您的删除子现在可以运行以下代码。

dim qry as string
dim strLookup as string

strLookup = dlookup("[Allow deletion]","[Your Table]", YOURSELECTEDFIELDHERE & "=[Values]")

if strLookup = "No" Then
    msgbox "You're not allowed to delete this field."
    exit sub
else 
    qry = "DELETE * FROM [Your Table] WHERE [Values] = YOURSELECTEDFIELDHERE"
    CurrentDB.Execute qry
    Me.YourListBoxName.Requery
end if

这将查找您从列表框中获取的值,将其与“允许删除”字段匹配,如果该字段标记为“是”则将其删除,或者如果标记为“否”则将其删除。

如果您只想暂时删除该字段并在下次加载表单时显示该字段 - 实际上隐藏它,您必须在名为“Show”的表中添加另一列,这也是a是/否字段,并将默认值设置为是。

然后,您将rowsource设置为SELECT * FROM [YOURTABLE] WHERE [Show] = "Yes"

然后,上述代码中的qry应设置为:

UPDATE [YOURTABLE] SET [YOURTABLE].[Show] = "No" WHERE ((([YOURTABLE].[Values])=YOURSELECTEDFIELD));

然后,这会将Show的值更改为No,因此当列表框被重新获取时,它将不再出现。

您需要运行另一个查询,以便在表单退出时将所有这些更改回“是”。