我试图在我的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
这样做(或应该做的)是确保没有其他人在同一场比赛中拥有相同的奖牌。
我做错了什么?
答案 0 :(得分:3)
使用Access中的组合框,您需要确保.value确实是您想要的。通常隐藏第一列是.value,而在下拉框中可见的不是.value。当使用组合框来消除混淆时,我使用.columns属性。
另外,为了确保组合框中的结果是数字而不是文本(因为您在示例中未使用引号),我使用val()函数将组合框数据转换为数字。如果它已经是一个数字,这将没有任何效果。否则,如果它是一个以字符串形式存储的数字,它会将其转换为数字。这可能不是绝对必要的,但它消除了另一个可能的问题。如果组合框列的值是某些不能转换为数字的文本,则它将返回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