Ms access 多选组合框-必填字段

Ms access 多选组合框-必填字段,ms-access,vba,ms-access-2010,ms-office,Ms Access,Vba,Ms Access 2010,Ms Office,这是我第一次在这个网站上发帖,尽管我已经找到了一些帮助我的答案。然而,尽管进行了广泛的研究,我还是无法找到这个具体问题的答案 我有一个表单,其中有多个字段,有些是必填字段,有些不是 我能够为所有必填字段开发代码,例如,除了这个字段(Field1) 不同之处在于Field1是一个带有复选框的下拉列表,其中可以选择多个复选框 如何为以下代码调整此类型的字段 ElseIf Len(Me.Category & "") = 0 Then Cancel = True response = Msg

这是我第一次在这个网站上发帖,尽管我已经找到了一些帮助我的答案。然而,尽管进行了广泛的研究,我还是无法找到这个具体问题的答案

  • 我有一个表单,其中有多个字段,有些是必填字段,有些不是
  • 我能够为所有必填字段开发代码,例如,除了这个字段(Field1)

  • 不同之处在于Field1是一个带有复选框的下拉列表,其中可以选择多个复选框

如何为以下代码调整此类型的字段

ElseIf Len(Me.Category & "") = 0 Then
Cancel = True
response = MsgBox("You must enter a value in 'Category'.", vbInformation, "Mandatory Field")
Me!Category.SetFocus
Category
是我的其他字段之一,该代码工作正常,但当我更改字段1的名称时,该代码不起作用

我希望我尽可能清楚,我真的很感谢社区的帮助

谢谢


Abu Fulan

我认为您要做的是将所有选定的项目放入一个数组,然后确定数组的长度是否大于0

虽然不完全相同,但我认为这个问题的公认答案(带绿色复选标记的答案)可以稍加修改,以满足您的需求:

编辑 您可以删除阵列部件并仍使用代码:

Public Function GetSelectedItems(lBox As MSForms.ListBox) As String

Dim i As Integer
Dim selCount As Integer
    selCount = -1
    '## Iterate over each item in the ListBox control:
    For i = 0 To lBox.ListCount - 1
        '## Check to see if this item is selected:
        If lBox.Selected(i) = True Then
            '## If this item is selected, then add 1 to your selCount counter
            selCount = selCount + 1
        End If
    Next

    If selCount = -1 Then
        '## If no items were selected, return a messagebox saying this is mandatory
        msgbox "You MUST select something from the listbox."
    Else:
        '## Otherwise, don't worry about it
    End If
End Function

我认为您要做的是将所有选定项放入一个数组中,然后确定数组的长度是否大于0

虽然不完全相同,但我认为这个问题的公认答案(带绿色复选标记的答案)可以稍加修改,以满足您的需求:

编辑 您可以删除阵列部件并仍使用代码:

Public Function GetSelectedItems(lBox As MSForms.ListBox) As String

Dim i As Integer
Dim selCount As Integer
    selCount = -1
    '## Iterate over each item in the ListBox control:
    For i = 0 To lBox.ListCount - 1
        '## Check to see if this item is selected:
        If lBox.Selected(i) = True Then
            '## If this item is selected, then add 1 to your selCount counter
            selCount = selCount + 1
        End If
    Next

    If selCount = -1 Then
        '## If no items were selected, return a messagebox saying this is mandatory
        msgbox "You MUST select something from the listbox."
    Else:
        '## Otherwise, don't worry about it
    End If
End Function

我感谢你的迅速回复,我看了一下链接,似乎有点困惑。我对数组完全不熟悉。那么如何处理从列表框中选择的项目呢?我是说,从技术上来说,你可以移除阵列。整个想法是,如果所选项目的数量大于1,则不显示messagebox。该代码在列表框中循环并计算所选项目的数量。这是确定是否需要告诉用户listbox是必需的所需操作。确定是有意义的,因此我会将此is代码放入一个模块中,然后从表单中调用它,看看它是否大于0。然后显示消息框。因此,我只需将lbox更改为MSForms.ListBox,将lbox更改为field1.ListBoxNo。您将创建一个新模块,并将上面的代码粘贴到其中,然后从表单中将其作为函数调用,并将列表框名称传递到其中。因此,在你的表单中,你会写一些类似GetSelectedItems(你的ListBoxName)的东西,其中“你的ListBoxName”是你的listbox的名称。因此,我会写GetSelectedItems(Field1),其中listbox=Field1我感谢你的快速回复,我看了一下链接,似乎有点困惑。我对数组完全不熟悉。那么如何处理从列表框中选择的项目呢?我是说,从技术上来说,你可以移除阵列。整个想法是,如果所选项目的数量大于1,则不显示messagebox。该代码在列表框中循环并计算所选项目的数量。这是确定是否需要告诉用户listbox是必需的所需操作。确定是有意义的,因此我会将此is代码放入一个模块中,然后从表单中调用它,看看它是否大于0。然后显示消息框。因此,我只需将lbox更改为MSForms.ListBox,将lbox更改为field1.ListBoxNo。您将创建一个新模块,并将上面的代码粘贴到其中,然后从表单中将其作为函数调用,并将列表框名称传递到其中。因此,从表单中,您可以编写类似GetSelectedItems(YourListboxName)的内容,其中“YourListboxName”是列表框的名称