Access2010型が一致しませんエラーの解決方法

このQ&Aのポイント
  • Access2010のVBAを使用してテキストファイルからデータを取り込む際、整数ではなく英数字のデータがあると「実行時エラー13 型が一致しません」というエラーが表示されます。
  • このエラーが発生する原因は、テーブル内に一致するデータが存在しないときにもエラーが出るためです。
  • エラーを回避するためには、コード内の条件分岐の部分を見直し、一致するデータが存在するかどうかを事前にチェックする必要があります。
回答を見る
  • ベストアンサー

Access2010 「型が一致しません。」エラー

お世話になっております。 テキストファイルからデータを取り込んで、テーブルにあるデータと同じデータのみを表示させるプログラムがあります。 コードが「001」のように整数の場合は問題ないのですが、「A001」のように英数のデータの場合は、このエラーが出てしまいます。 「実行時エラー13 型が一致しません。」 デバッグをクリックすると、下記の部分が黄色に反転します。 「If DFirst("コード", "テーブル", "コード = '" & avarFldData(0) & "'") Then」 テキストファイルのデータがテーブルにない場合はエラーが出ませんので、一致したデータがある場合のみエラーが出ます。 VBAはあまり詳しくありませんので、エラーが出なくなる方法を教えていただければ助かります。 よろしくお願いいたします。 Private Sub Form_Load() Dim dbs As Database Dim rst As Recordset Dim strImportDir As String Dim strFile As String Dim lngFileNum As Long Dim strData As String Dim avarFldData As Variant Dim iintLoop As Integer DoCmd.Hourglass True strImportDir = Application.CurrentProject.Path & "\" strFile = strImportDir & "File.TXT" Set dbs = CurrentDb GoSub ReadFile Me.Requery DoCmd.Hourglass False Exit Sub ReadFile: Set rst = dbs.OpenRecordset("履歴", dbOpenDynaset, dbAppendOnly) lngFileNum = FreeFile() Open strFile For Input As #lngFileNum Do Until EOF(lngFileNum) Line Input #lngFileNum, strData avarFldData = Split(strData, ",", , vbTextCompare) For iintLoop = 0 To UBound(avarFldData) avarFldData(iintLoop) = Trim$(avarFldData(iintLoop)) Next iintLoop If DFirst("コード", "テーブル", "コード = '" & avarFldData(0) & "'") Then With rst .AddNew !コード = avarFldData(0) .Update End With End If ' End If Loop Close #lngFileNum rst.Close Kill strFile Return End Sub

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

  • ベストアンサー
  • zeichef
  • ベストアンサー率75% (3/4)
回答No.1

If DFirst(True, "テーブル", "コード = (以下略) にしてみてはいかがでしょう。

kami21
質問者

お礼

おかげさまで、エラーが出なくなり、正常に表示することができました。 とても助かりました。ありがとうございました。

関連するQ&A

  • Access2007 データ型エラーについて

    お世話になっております。 下記のVBAでコードを数値型からテキスト型に変更したところ、「抽出条件でデータ型が一致しません。」というエラーが出ました。 デバッグをクリックすると、dbs.Execute strSQLの部分が黄色に反転しています。 VBAはあまり詳しくありませんので、エラーが出なくなる方法を教えていただければ助かります。 よろしくお願いいたします。 Private Sub 在庫差引_Click() Dim dbs As Database Dim rst As Recordset Dim strSQL As String Set dbs = CurrentDb Set rst = Me!サブフォーム.Form.RecordsetClone With rst .MoveFirst Do Until .EOF strSQL = "UPDATE マスター " & _ "SET 在庫数 = NZ(在庫数) - " & Nz(!数量, 0) & " " & _ "WHERE コード = " & !コード dbs.Execute strSQL .MoveNext Loop .Close End With End Sub

  • ACCESS2000VBAでエラー「型が一致しません」

    ACCESS2000で、フォーム上にボタンを作り、そのボタンをクリック時に 以下のイベント プロシージャを実行させています。 Dim dbs As Database Dim rst As Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("採番_相談者") Dim Number rst.MoveFirst Number = rst!相談者番号 Number = Number + 1 Me.相談者NO = Number '相談者NOはフォーム上のテキストボックスです。 で上記 Set rst = dbs.OpenRecordset("採番_相談者") の所で、「実行時エラー 13 型が一致しません」とエラーになります。 テーブル:採番_相談者は、オートナンバー型のIDフィールドと相談者番号という7桁のテキスト型で ”1000001”が入っています。(ちなみに、数値型に変えても同じエラーでした。) 詳しい方教えてください。お願いします。

  • Access2007 コンパイルエラーについて

    お世話になっております。 Access2003で問題なく使っていたプログラムを2007用accdbに変換して2007で動かしたところ、コンパイルエラーが出るようになりました。 エラー表示 コンパイルエラー:メソッドまたはデータ メンバが見つかりません。 コードは以下のとおりで(抜粋)、.Edit部分が反転します。 簡単なVBAはわかりますが、今回のエラーは何が原因かわかりませんので、ご教授いただければ幸いです。 よろしくお願いいたします。 Private Sub 元に戻す1_Click() Dim dbs As Database Dim rst1 As Recordset Dim rst2 As Recordset Dim strSQL As String Dim lngTmpVol As Long Dim lngSubVol As Long DoCmd.RunCommand acCmdSaveRecord Set dbs = CurrentDb '売上構成テーブルから画面上のb伝票コードのレコードセットを開く strSQL = "SELECT bbコード, 数量 FROM 売上構成 " & _ "WHERE b伝票コード = " & Me!b伝票コード & _ " ORDER BY 売上構成コード DESC" Set rst1 = dbs.OpenRecordset(strSQL) '売上構成の読み込みループ Do Until rst1.EOF 'カレントレコードの数量を変数に保存 lngTmpVol = rst1!数量 'カレントレコードのbbコードと画面上の社員コードで出庫履歴のレコードセットを開く strSQL = "SELECT 出庫数量, 確定数量, 返却数量 FROM 出庫履歴 " & _ "WHERE bbコード = " & rst1!bbコード & " AND 社員コード = " & Me!社員コード & _ " ORDER BY 出庫日 DESC, 出庫コード DESC" Set rst2 = dbs.OpenRecordset(strSQL) With rst2 If .RecordCount > 0 Then '出庫履歴の読み込みループ Do Until .EOF .Edit If Nz(!確定数量) >= lngTmpVol Then '数量すべてを確定数量から減算できるとき '減算後の数量を取得 lngSubVol = Nz(!確定数量) - lngTmpVol !確定数量 = IIf(lngSubVol <> 0, lngSubVol, Null) lngTmpVol = 0 Else '数量すべては確定数量から減算できないとき lngTmpVol = lngTmpVol - Nz(!確定数量) !確定数量 = Null End If .Update 'すべてを割り当てたらループを抜ける If lngTmpVol <= 0 Then Exit Do .MoveNext Loop End If .Close End With rst1.MoveNext Loop rst1.Close End Sub

  • AccessでCSVをインポートしたい(VBA)

    お世話になります。AccessVBA暦2週間の初心者です。 AccessでCSVをインポートできたらいいなと思い ↓下のサイトにあるVBAサンプルを参考にして以下のようにプログラミングをしました。 http://memo.bz/access/advance/csvinpsam Public Function SplitTest() On Error GoTo myError Dim dbs As Database Dim rst As Recordset Dim varData As Variant Dim lngFileNum As Long Dim strData As String Dim xSQL As String FileName = TestGetFileName '入力元CSVファイルを開く lngFileNum = FreeFile() Open FileName For Input As #lngFileNum 'テーブルを開く Set dbs = CurrentDb Set rst = dbs.OpenRecordset("Data") 'CSVファイルの全レコードを読み込むループ Do Until EOF(lngFileNum) 'CSVファイルより1件分を読み込み Line Input #lngFileNum, strData 'カンマで区切って配列に代入 varData = Split(strData, ",", , vbTextCompare) '各フィールドデータをテーブルに追加 With rst .AddNew ![Code1] = varData(0) ![Code2] = varData(1) ![TS] = varData(2) ![PM] = varData(3) ![金額] = varData(4) ![摘要] = varData(5) ![メモ] = varData(6) .Update End With Loop rst.Close Close #lngFileNum MsgBox "データの取り込みが終了しました" Exit Function myError: MsgBox "ファイル名を指定してください" End Function 'CSVファイル選択 Function TestGetFileName() 'ファイル選択 Const ENABLE_WIZHOOK = 51488399 Const DISABLE_WIZHOOK = 0 Dim strFile As String Dim intResult As Integer WizHook.Key = ENABLE_WIZHOOK ' WizHook 有効化 intResult = WizHook.GetFileName( _ 0, "", "", "", strFile, "", _ "すべてのファイル (*.*)|*.*", _ 0, 0, 0, True _ ) WizHook.Key = DISABLE_WIZHOOK ' WizHook 無効化 TestGetFileName = strFile End Function ダイアログは普通に開けるのですがインポートが出来ず「ファイル名を指定してください」 というメッセージボックスが出ます。 弄っている部分は ![フィールド1] = varData(0)を ![Code1] = varData(0)にしているぐらいです。 何が悪いのか皆目見当がつきません。 こんな初心者でございますがご教授のほどよろしくお願いします。 (ヒントでも構いません) 説明不足等ございましたらご指摘のほどよろしくお願いします。

  • 実行時エラー'13' :型が一致しません。

    Windows XPで、Access 2002を使用しています。 テーブル1のフィールド1の値を、ハイフン区切りで分割をしたいと思い、split関数を使用して、 下記、VBAを実行しましたが、「実行時エラー'13' :型が一致しません。」と言うエラーが 発生して、先に進む事ができません。 ツール→参照設定で、Microsoft DAO 3.6 Object Libraryにチェックを入れたり外したりしましたが、 全く改善されず、同じエラーが発生します。 DAO.を付けると解決するとの事で、 Dim dbs As DAO.Database Dim rs As DAO.Connection としましても、同じエラーが出ます。 デバッグしますと、 Set rs = dbs.OpenRecordset("select フィールド1 from テーブル1") の所で発生しているようです。 Private Sub コマンド0_Click() Dim dbs As DAO.Database Dim rs As DAO.Connection Set dbs = CurrentDb Set rs = dbs.OpenRecordset("select フィールド1 from テーブル1") Dim Vartemp As Variant Vartemp = Split(rs, "-") Debug.Print Vartemp(0) Debug.Print Vartemp(1) Debug.Print Vartemp(2) Debug.Print Vartemp(3) End Sub 以上、初心者で、行き詰ってしまっておりますので、どうか宜しくお願いします。

  • Access2010 「演算子がありません」エラー

    フォーム上に別フォームを開くボタンがあるのですが、クリックすると実行時エラーが表示されます。 実行時エラー 3075 クエリ式”コード IN(○○,××)の構文エラー 演算子がありません。 コードを数値型からテキスト型に変更したのが原因だと思います。 エラーが出ない方法を教えていただければ助かります。 よろしくお願いいたします。 Dim rst As Recordset Dim strWhere As String Set rst = Me.RecordsetClone With rst If .RecordCount = 0 Then Beep Exit Sub End If .MoveFirst strWhere = "" Do Until .EOF strWhere = strWhere & IIf(Len(strWhere) > 0, ",", "") & !コード .MoveNext Loop .Close strWhere = "コード IN (" & strWhere & ")" End With DoCmd.OpenForm "フォーム", , , strWhere

  • Access2007 サブフォームのレコードを一括印刷する方法

    お世話になっております。 サブフォームは帳票型になっており、下記で表示されている全レコードのチェックが入ります。 これと平行して、各レコードを印刷したいのですが、カーソルがあるレコードのみがレコードの数だけ印刷されてしまいます。 これを各レコードごとに印刷したいと思います。 Dim dbs As Database Dim rst As Recordset Dim strSQL As String Set dbs = CurrentDb Set rst = Me.RecordsetClone With rst If .RecordCount > 0 Then .MoveFirst Do Until .EOF .Edit !チェック = True DoCmd.OpenReport "印刷", acNormal, , "コード=" & Me.コード .Update .MoveNext Loop End If .Close End With ご教授いただければ幸いです。よろしくお願いいたします。

  • .netからアクセスへの配列変数渡しについて

    .NET 2010でアクセスのモジュールを実行させようとしております。 アクセスに配列を引数にしようとしていますが “Public ReadOnly Default Propety Chars(index as Integer) as Charに対する引数が多すぎます。” のエラーが発生しており困っております。 これはどのようなことが原因でエラーが発生しているのでしょうか。 また、解決策がありましたらご教授していただけないでしょうか。 .net側 Private sub AcsRun() Dim strdata as string Dim pData(50,10) as object Strdata =数値1 pData(1,1) = 文字2 pData(2,1) = 数値2     ・・・・・・・   ‘ここでpDataでエラーがでます。 If app.Run("AcsMdl"( Strdata, pData) = False) Then    Exit sub End If End sub アクセス側 Public Function AcsMdl (Strdata As Integer, pData () As Variant) As Integer AcsMdl = false ‘処理 AcsMdl = true End function

  • エラー(型が一致しません。)の対処方法

    またまたお世話になります。 たとえば以下の例です。 Dim dbs As Database, rec As Recordset Set dbs = CurrentDb Set rec = dbs.OpenRecordset("SELECT * FROM テーブル1") 最後の行の実行でエラーになります。何が悪くてどうしたらいいのでしょうか。初歩的ですが、よろしくお願いします。

  • テーブルのリンク(ACCESS)

    ACCESS2003で下記の記述で「実行時エラー ’3219’ 無効な処理です。」というエラーメッセージがでます。 外部mdbでテーブルをリンクさせるとこのエラーがでます。同じmdbファイルにデータテーブルを置くと問題なく処理できます。 参照設定も過去ログを見てチェックしています。 Dim dbs As DAO.Database Dim rst As DAO.Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("テーブル名", dbOpenTable) ACCESS97では何の問題もなかったのですが, 2003ではうまくいきません。 どうかよろしくお願いします。