• 締切済み

VBA:実行時エラー

kkkkkmの回答

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.1

SQLやデータがどのようになっているのか分からなくて、AccessだとしたらSQLの抽出条件の引数がVariant型というのもよく分からないのですが 第5話 VBA内でSQLを扱うコツ【連載】実務で使えるAccessのコツ https://www.r-staffing.co.jp/engineer/entry/20210910_1 わからな状態の想像での回答になりますが エクセルのデータが数値じゃないものがあるのかもしれませんのでSQLの抽出条件の「テーブルの抽出対象項目」をValで囲ってみてください。 Val(テーブルの抽出対象項目)

関連するQ&A

  • 実行時エラー3251

    今まで問題なくできていたのですが エクセルのvbaのADOでアクセスにレコードを追加していました。 なんだか今日いきなりエラーになりました。 エラー内容は 実行時エラー3251 現在のRecordsetは更新をサポートしていません。 プロバイダ―か、選択されたロックタイプの限界の可能性があります です。 発生したコードは rs("不可") = エラー文字列 です。 要するに、今までは更新できるテーブルだったけど 何かの拍子で更新できないテーブルになってしまったから エラーになったのでしょうか?

  • EXCEL VBAでACCESSに接続時にエラーが出ます

    自分のPCの場合は、EXCEL VBAでACCESSにADOで接続時してデータを抽出することが出来ますが、他PCより同じマクロを動かすと「実行時エラー'3706'、プロバイダーが見つかりません。正しくインスツールされていない可能性があります。」のエラーメッセージが出ます。 ACCESSのデータは、EXCEL VBAで自分のPCからのみOPEN出来るようになっているようですが、他のPCからもEXCEL VBAでOPEN出来るようにするにはどうしたら良いのでしょうか。 ACCESSの事は良く分からないので教えてください。 ちなみに、他のPCで直接ACCESSデータを起動するとOPEN出来ます。 宜しく、お願いします。

  • VBAの実行時エラー'2522'について

    前任者がAccess2003により作成したデータベースがあります。 CSVデータを取り込む仕組みがあるのですが、下記のエラーが出て困っています。 実行時エラー '2522': このアクションまたはメソッドを実行するには[File Name/ファイル名]引数が必要です。 どうやらVBAによるエラーだと判明しましたが、それ以上はよくわかりません。 以下のような構文になっています。 Option Compare Database ---------- Private Sub CSV取込_Click() TextConv strFileName, "マスター定義", "T_マスター" End Sub ---------- Sub TextConv(strFle, strInp, strTbl) Dim strSQL As String strSQL = "DELETE * FROM " & strTbl If MsgBox("テーブルデータを更新しますか?", 4, "テーブル更新") = vbYes Then CurrentProject.Connection.Execute strSQL DoCmd.TransferText acImportDelim, strInp, strTbl, strFle, True MsgBox "テーブルデータを更新しました" End If End Sub ---------- Private Sub 参照_Click() Dim strFileName As String strFileName = GetFileName() If Len(strFileName) > 0 Then Me.filepath = strFileName Else MsgBox "取込対象ファイルを選択してください! " End If End Sub 以上のようになっています。 デバッグを実行すると「strFle」の値がEmptyになっているのでここだとは思うのですが、どうしたらよいかわかりません。 どなたかお知恵をお貸し願えませんでしょうか。 宜しくお願いします。

  • VBAからADOを使ってクエリのクエリを作成したい

    VBAからADOを使ってクエリのクエリを作成したい ADO初心者です。 VBA側で入力された引数を元に、ADOを使ってあるmdbファイルにあるクエリ(1)の抽出条件を変更した上で(抽出条件はVBA側の引数によって毎回変わります)、クエリ(1)の中から重複したレコードを抽出するクエリ(2)を作成したいと考えています。クエリ(1)並びにクエリ(2)をそれぞれ単独で作成する事は出来たのですが、クエリ(1)の結果を反映したクエリ(2)を作成する方法が分かりません。 なお、クエリ(1)の抽出条件変更は、RecordsetオブジェクトのOpenメソッドを使って行っています。何となくこれはレコードの更新は出来てもクエリの更新は出来ないような気がしており、それが原因のような気がしているのですが、クエリの更新をしたい場合はどうすればよろしいでしょうか?

  • アクセス エラーを数値「0」に変換するには

    こんばんは。 テーブル1のフィールド1を、テキスト型にし 1 2 3 あ と入力しました。 クエリを作成し、 SELECT CLng([テーブル1]![フィールド1]) AS 数値に変換 FROM テーブル1; とした場合、 「あ」の部分が数値に変換できないため、「#エラー」となります。 このままだと、並べ替えをしようとすると 「抽出条件でデータ型が一致しません。(Error 3464)」 となるため、「#エラー」を0へ変換したいのですが、 やり方がわかりません。 IIFなどを使うのでしょうか? ご教授よろしくお願い致します。

  • 実行時エラー3001「引数が間違った型、許容範囲外

    VBAのADOです。 このフィルタの文字列、どう改善すればいいか教えてください。 名前フィールドが「test」か「共通」でなおかつ、 対象外フィールドが0のみ抽出したいのですが 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 になります。 対象外フィールドのデータ型はYes/No型です。 rs.Filter = "名前 = 'test' or 名前 = '共通' and 対象外 = " & 0 rs.Filter = "名前 = 'test' or 名前 = '共通' and 対象外 = 0" どちらもダメでした。

  • 実行時エラー -2147217887

    一つのアクセスファイルに エクセルからADOでデータを追加しているのですが その外套のアクセスファイルも捜査をしているタイミングで 実行時エラー -2147217887 他のユーザー が同じデータに対して同時に更新を試みているので、 プロセスが停止しました。 と表示されますが このエラーを表示せず、エクセルADOを優先されるには どういうコードにすればいいですか? ちなみに一度中断モードにして 同じコードを再度実行しようとすると 実行時エラー -2147217887 Update または CancelUpdateメソッドには、対応するAddNewまたはEditメソッドが必要です とエラー内容が変わります。 コードは rs.Open "SELECT * FROM テーブル", cn, adOpenStatic, adLockPessimistic rs.Filter = "番号 = " & 番号 rs("フィールド") = str文字 ’ココでエラー の時です。

  • ACCESS VBAのOpenForm書き方

    ACCESS VBAについて教えてください。 DoCmd.OpenFormのWhereConditionの部分の記述がわからないのです。 1つの条件の場合は問題なく表示できたのですが、複数条件にすると「抽出条件でデータ型が一致しません。」とエラーになってしまいます。 なぜでしょうか? このように記述しています。 DoCmd.OpenForm "会員データ", , , "種別 = '" & Me![種別] & "' AND 会員番号 = '" & Me![会員番号] & "'" 種別、会員番号ともに数値データです。

  • 実行時エラー-2147217900(80040e1

    アクセスVBAです。 Set cn = CurrentProject.Connection rs.Open "T_test", cn, adOpenKeyset, adLockOptimistic としたときに、T_testと言うテーブル名は存在するのに、 「実行時エラー-2147217900(80040e14) SQLステートメントが正しくありません Delete、Insert、Procedure、SelectまたはUpdateを使用して下さい。」 と言うエラーが発生します。 どうしてテーブルが存在するのにこのエラーが発生するのでしょうか?

  • 実行時エラー1004がでてしまう(VBA)

    実行時エラー1004「RangeクラスのAutoFilterメソッドが失敗しました」が出てしまいます。 (1)とあるシートのL列に"判定"を作り、そこに、D列の名称の中に、特、SO、FRが入っていないものには〇をL列に入力し、〇が付くものを抽出するというものを作ったのですがエラーが出てしまいます。(この内容は@の範囲になります)解決策を教えていただけないでしょうか? (2)またこのVBAを行った際に、本ファイルの処理リストのデータと評価リストのデータが消えてしまいます。(データがうまく表示されていない状態で行間をダブルクリックすれば全て出てくる)解決策を教えていただけないでしょうか? ちなみに自分はVBA初心者です。 Sub 抽出() Dim フォルダ, ファイル名, 基本ファイル名 Dim i, j As String i = ActiveWorkbook.Name j = ActiveSheet.Name Application.DisplayAlerts = False '警告ダイアログボックスを表示しない 基本ファイル名 = Sheets("データリスト").Range("B8").Value '基本ファイル名(欲しいデータがあるBook)を定義 Workbooks.Open 基本ファイル名 '基本ファイル名(欲しいデータがあるBook)を開く Worksheets(1).Range("A1:O400").Copy '基本ファイル名内にある履歴データシートの内容をコピー Workbooks(i).Worksheets("処理リスト").Range("A1:O400").PasteSpecial '基本ファイル名のコピーを本ファイルの処理リストに貼り付ける Workbooks(基本ファイル名).Close SaveChanges:=False '基本ファイル名を閉じる Sheets(j).Select With Worksheets("処理リスト") .Range("A1").AutoFilter _ Field:=10, _ Criteria1:="003", _ Operator:=xlOr, _ Criteria2:="004" End With '本ファイルの処理リストのA列からの10列目の"003"もしくは"004" を抽出 'Dim k As Long …@ Range("L1") = "判定" For k = 2 To Cells(Rows.Count, 1).End(xlUp).Row With Cells(k, 4).Interior If .Cells(k, 4) <> "" * 特 * "" And .Cells(k, 4) <> "" * SO * "" And .Cells(k, 4) <> "" * FR * "" Then Cells(k, 12) = "〇" End If End With Next k Range("A1").AutoFilter 12, "〇" →ここでエラーが出る …@ Dim データ範囲 As Range Dim 抽出列 As Variant Dim l As Long Set データ範囲 = Worksheets("処理リスト").Range("A1").CurrentRegion 抽出列 = Array(3, 4, 5, 10) For l = 0 To UBound(抽出列) データ範囲.Columns(抽出列(l)).Copy Sheets("評価リスト").Range("D7").Offset(0, l) Next '本ファイルの処理リストの3,4,5,10列を本ファイルの評価リストのD7に貼り付け Application.DisplayAlerts = True '警告ダイアログボックスを表示するに戻す MsgBox ("履歴データを取り込みました") End Sub