4

我试图在我的 VBA 中创建一个函数,如果他们尝试插入的记录已经存在,但它返回类型不匹配。

EventCombo 是一个整数 MedalCombo 是字符串

Private Sub MyCombo_BeforeUpdate(Cancel As Integer)

If Not IsNull(DLookup("RacerID", "Medals", "RaceID = " + EventCombo.Value _
+ " AND Medal = '" + MedalCombo.Value + "'" )) Then
MsgBox "Record Exists"
End If.

End Sub

这样做(或应该做的)是确保没有其他人在同一场比赛中获得相同的奖牌。

我究竟做错了什么?

4

1 回答 1

3

使用 Access 中的组合框,您需要确保 .value 确实是您想要的。通常第一列是隐藏的,它是 .value,而下拉框中可见的不是 .value。当使用组合框消除混淆时,我使用 .columns 属性。

此外,为了确保组合框的结果是数字而不是文本(因为您在示例中没有使用引号),我使用 val() 函数将组合框数据转换为数字。如果它已经是一个数字,这将无效。否则,如果它是存储为字符串的数字,它会将其转换为数字。这可能不是绝对必要的,但它消除了另一个可能的问题。如果组合框列的值是一些无法转换为数字的文本,它将返回 0,您可以在代码中对其进行测试。

我用以下内容稍微清理了你的代码

  • 我用 & 替换了 + 就像 Remou 说的
  • 将 .value 更改为 .columns(0)。如果您要查找的列不是第一个,请将 0 更改为适当的值
  • 值()函数
  • 删除了续行_。(个人喜好,无视)

Private Sub MyCombo_BeforeUpdate(Cancel As Integer)

    If Not IsNull(DLookup("RacerID", "Medals", "RaceID = " & Val(EventCombo.Columns(0)) & " AND Medal = '" & MedalCombo.Columns(0) & "'")) Then
        MsgBox "Record Exists"
    End If

End Sub
于 2012-04-21T11:35:11.987 回答