访问 VBA - 使用组合框(多值字段)时类型不匹配

Posted

技术标签:

【中文标题】访问 VBA - 使用组合框(多值字段)时类型不匹配【英文标题】:Access VBA - Type Mismatch when working with Combo Boxes (Multi Valued Fields) 【发布时间】:2020-08-31 20:50:01 【问题描述】:

我有一个表单,它一次显示一条记录,并允许通过在文本框和组合框中显示所有记录来编辑记录。其中一些是基于查找字段的组合框,其中的值是从预设列表(多值字段)中提取的。

之后,我有一个类模块,其中为记录中的每个字段定义了一个属性(一个名字属性、一个姓氏属性、一个地址属性......你明白了)。我有一个从类创建对象的函数,然后从表单中获取值并将它们分配给相应的属性。这适用于大多数字段,但一旦到达第一个组合框(多选),就会引发类型不匹配错误。我使用的代码是:

If Me.Issue <> vbNullString Then
ProfileObj.Issue = Me.Issue
End If
'Me.Issue is the combobox on the form - this is in the forms module
'ProfileObj is the class instance

如果您想查看 ProfileObj 对象的类模块中的属性:

Private ProfileIssue As String
'... other variable declarations
Property Get Issue() As String
    Issue = ProfileIssue
End Property
Property Let Issue(rData As String)
    ProfileIssue = rData
End Property

我也尝试过使用Me.Issue.ValueMe.Issue.TextMe.Issue.Column(0) 来引用组合框,但这些都不起作用。我什至尝试使用CStr(Me.Issue),但无济于事。如何获取组合框中显示的内容并将其分配给字符串变量?

【问题讨论】:

字符串变量应该接受字母数字字符的任意组合。它不会接受 Null。我从未使用过自定义类。 我有一个 If 语句在分配任何内容之前检查 Null,所以我很确定这不是问题 试试Me.Issue &lt;&gt; Nothing 我刚刚意识到您说组合框绑定到多值字段。这可能是问题的原因。从这些字段中提取数据时,MVF 需要特殊处理,并且组合框不像普通组合框那样工作。我从不使用 MVF。 @Mike67 当我这样做时,整个函数将无法运行... 【参考方案1】:

我想通了……

我需要使用每个框的.Text 属性从每个组合框中读取文本。我曾在 If 语句中尝试过,但不是用于构建 If 语句的实际比较。代码的工作版本现在为:

        Me.Issue.SetFocus 'You have to set focus in order to read the text, dont ask me why
        If Me.Issue.Text <> vbNullString Then 'This is where my code wasn't working
        .Issue = Me.Issue.Text 'I had tried it here before, but the code never got there since the line before failed
        End If

【讨论】:

以上是关于访问 VBA - 使用组合框(多值字段)时类型不匹配的主要内容,如果未能解决你的问题,请参考以下文章

使用多值控制源隐藏组合框中的值

通过 vba ms 访问将多值列的数据绑定到组合框中

准时下班系列!Access合集之第7集—自定义多选组合框和VBA处理多值字段实例

如何在 MS Access 2010 中使用 VBA 选择多值组合框的值?

如何更新 ms access vba 中的多值组合框?

访问:多值字段