2014-02-26 26 views
0

我有一个列表框,其中包含18个项目。通过单击“删除”按钮,可以从列表框中删除所选项目。如何防止用户删除指定的某些项目?如何限制使用访问vba从列表框中删除指定项目

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(作为自动编号)列的表格,要在列表框中显示的值(作为文本框)以及最后一列可以勾选yes或no(作为布尔值或是/否字段)。例如。

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 

这会寻找你从列表框中抢过值,匹配它允许删除字段,删除该字段被标记为Yes或离开它,如果它被标记为

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

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

然后在上面的代码qry应改为设置为:

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

那么这将显示的值更改为无,所以当列表框重新查询,将不会再出现。

您需要运行另一个查询以将它们全部更改回“是”。

+0

我是vba的新手,能否请您提供一下逻辑。 – vuyy1182

+0

没问题 - 添加了代码和解释。 – BFWebAdmin

+0

你真棒,非常感谢你。一个问题。如果我删除允许删除的项目是'是',那么当我重新加载该列表时,每次在表单加载时,以前删除的记录是否会显示在列表框中? – vuyy1182