我有一个包含 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));

然后,这会将“显示”的值更改为“否”,因此当重新查询列表框时,它将不再出现。

您需要运行另一个查询以在表单退出时将它们全部更改回“是”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top