MS Access在运行宏/查询后取消选择列表框

时间:2014-02-19 16:01:03

标签: ms-access macros listbox

所以我在Access中有一个表单(frmBookingForm),以及一个显示查询结果的列表框(lstMyBookings)。 在这下面,我有一个按钮(cmdDeleteBooking),它使用lstMyBookings选项作为输入运行删除查询。然后该按钮运行一个宏,首先检查列表框中的记录是否被选中,如果是,则运行删除查询并重新查询数据,因此删除的记录不再显示在列表框中。如果不是,则显示错误消息。 但是,如果我再次单击该按钮,它会再次运行删除查询,即使在列表框中显然没有选择任何内容。

基本上,我如何“清除”列表框选择?

我更喜欢可以以宏格式完成的解决方案,因为我几乎不了解VBA。但是,如果提供VBA解决方案,我将非常感谢对它的简短解释。

谢谢:)

1 个答案:

答案 0 :(得分:3)

看起来this website有一个不错的功能。基本上,你需要测试它是否是多选,然后做两件事之一。我想如果你提前知道它是/不是多选,你甚至不需要“if”语句:

If List0.MultiSelect = 0 Then
    List0 = Null
Else
    For Each varItem In List0.ItemsSelected
        List0.Selected(varItem) = False
    Next
End If

如果控件的MultiSelect属性设置为None,则此代码只将List0设置为Null。如果控件的MultiSelect属性设置为其他任何内容,则代码将循环显示当前所选的所有项,并将该项的Selected属性设置为False。我的示例假定您的控件名为List0

修改

要使用此代码,请使用事件而不是宏。这是你如何做到这一点:

  1. 右键单击按钮,选择属性
  2. 在“属性表”窗口中,单击“事件”选项卡
  3. 点击“点击”空白区域内部,然后点击下拉箭头,然后选择“[事件处理]”
  4. 点击省略号(“...”)进入代码编辑器。
  5. 在代码编辑器中,您应该已经拥有了按钮的事件(让我们假设该按钮被称为Command1:

    Private Sub Command1_Click()
    
    
    End Sub 
    

    在两者之间添加代码(假设列表框名为List0):

    Private Sub Command1_Click()
    
    If List0.MultiSelect = 0 Then
        List0 = Null
    Else
        For Each varItem In List0.ItemsSelected
            List0.Selected(varItem) = False
        Next
    End If
    
    End Sub