访问 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.Value
、Me.Issue.Text
和Me.Issue.Column(0)
来引用组合框,但这些都不起作用。我什至尝试使用CStr(Me.Issue)
,但无济于事。如何获取组合框中显示的内容并将其分配给字符串变量?
【问题讨论】:
字符串变量应该接受字母数字字符的任意组合。它不会接受 Null。我从未使用过自定义类。 我有一个 If 语句在分配任何内容之前检查 Null,所以我很确定这不是问题 试试Me.Issue <> 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 - 使用组合框(多值字段)时类型不匹配的主要内容,如果未能解决你的问题,请参考以下文章
准时下班系列!Access合集之第7集—自定义多选组合框和VBA处理多值字段实例