我有一个包含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
答案 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,因此当列表框被重新获取时,它将不再出现。
您需要运行另一个查询,以便在表单退出时将所有这些更改回“是”。