如何使用access vba限制从列表框中删除指定项目
-
21-12-2019 - |
题
我有一个包含 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
解决方案
您可以将这些值存储在表中吗?然后你可以在表中有一列指定是否可以删除该字段,这很容易构建到你的 VBA 中。
编辑进一步解释:
您的列表框是否未绑定(即没有特定字段作为其数据源)。
创建一个表,其中包含 ID 的列(作为自动编号)、要显示在列表框中的值(作为文本框)以及可以勾选“是”或“否”的最后一列(作为布尔值或是/否字段) )。例如。
ID Values Allow deletion?
1 Example Yes
2 Another example No
3 Yes another example Yes
在列表框的行源中,选择该表。
您的删除子程序现在可以运行以下代码。
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
这将查找您从列表框中获取的值,将其与“允许删除”字段进行匹配,如果该字段标记为“是”则将其删除,如果该字段标记为“否”则保留它。
如果您只想暂时删除该字段并让它在下次加载表单时显示 - 实际上,隐藏它,您必须向表中添加一个名为“显示”的进一步列,这也将是/无字段,并将默认值设置为是。
然后您将 rowsource 设置为 SELECT * FROM [YOURTABLE] WHERE [Show] = "Yes"
.
然后 qry
上面的代码中应该设置为:
UPDATE [YOURTABLE] SET [YOURTABLE].[Show] = "No" WHERE ((([YOURTABLE].[Values])=YOURSELECTEDFIELD));
然后,这会将“显示”的值更改为“否”,因此当重新查询列表框时,它将不再出现。
您需要运行另一个查询以在表单退出时将它们全部更改回“是”。
不隶属于 StackOverflow