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を適切な値に変更してください
  • value()関数
  • 行の継続を削除しました_。(個人的な好み、無視して構いません)

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 に答える