• ベストアンサー

Excelのセルに入力した値からAccessの値を取得・表示したい

いつもお世話になります。 Excel2003にて、セルB3からB45にてユーザーIDを入力すると、入力されたIDからネットワーク上にあるMDBファイル(Access2003)のユーザー氏名をC3からC45のセルに表示する仕組みを作りたいのですが、以下のVBAを作成しましたがマクロを実行しても 「実行時エラー'13':  型が一致しません。」 とエラーが表示され、実際にセルにIDを入力してもユーザー氏名は表示されません。 エラー内容もどこの型が問題なのかも不明ですし、下記のコード自体もどこが間違いなのか皆様のご指摘をお願いいたします。 なお、MDBファイルのユーザーIDフィールドは数値型です。 Option Explicit Private Sub Worksheet_Activate() Dim UserID As Long Dim constr As String Dim con As New ADODB.Connection Dim rs1 As New ADODB.Recordset Dim sql1 As String With Range("B3:B45") .Value = UserID If UserID = "" Then .Offset(0, 1).Value = "" Else constr = "provider = Microsoft.Jet.OLEDB.4.0;Data Source = \\192.168.0.100\UserDB\userdb.mdb" con.Open constr sql1 = "select ユーザー氏名 where ユーザーID =" & UserID & ";" rs1.Open sql1, con If rs1.EOF Then MsgBox "入力したユーザーIDのユーザーはありません。", vbOKOnly + vbCritical, "ユーザーID入力エラー" .SetFocus Else .Offset(0, 1).Value = rs1!ユーザー氏名 End If End If End With End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

追加の説明です。 IsNull関数の使い方はWeb上に山ほどあります。多くの場合はヘルプの 引用がほとんどですが、IsNull(数値型)、IsNull(文字列型)のような使 い方をし、NullであればTrue、そうでなければFalseを返します。 ("")は長さが0の文字列を表します。ですからUserIDをLongと宣言して いるのに、UserIDを文字列として扱ったために[型が一致しない]という エラーが出たのです。では。

nkhall
質問者

お礼

ご回答ありがとうございました。 2回に渡ってわかりやすいご説明をいただき、おかげさまでこのエラーは解消することができました。 ただ、次のエラーが発生しまだ完成しておりませんが、自分で出来る限り調べてもなお、分からない時は再度ご質問をさせていただきます。 ありがとうございました。

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

お疲れ様です。 型が一致しないと言うエラーは、 If UserID = "" Then の部分で、UserID = "" というのは文字列型のときしか使用できません。 このプログラムではUserIDは数値型に設定しているので、この場合は     If IsNull(UserID) Then としなければなりません。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> With Range("B3:B45") > .Value = UserID 代入するUserIDはどこで値を設定してますか? Withの行にカーソルを置いて、f9でブレーク設定してください。 その後、f8キー押下でステップ実行できるので、どこの行でエラーになるじか、追えるはずです。

nkhall
質問者

お礼

ご回答ありがとうございました。 エラーになる行を追える方法は知りませんでした。 今後も活用できる知識を教えて頂き、ありがとうございました。

関連するQ&A