• 締切済み

Excel 2003 ADOの利用について。

Excel 2003 ADOの利用について。 Excel 2003 ADOの利用について。 現在、ExcelのVBAからADOを利用して自分自身のシートよりデータの抽出を行うものを作っています。 Recordsetを取得する際に意味不明なエラーが発生し、原因が分からず悩んでおります。 コードは下記の様になっております。 SQL = "SELECT Col1 FROM [Sheet1$]" SQL = SQL & " WHERE" SQL = SQL & " Col1 > 10" SQL = SQL & " and Col5 like '" & TextBox1 & "%'" Set RS = New ADODB.Recordset RS.Open SQL, CN, adOpenStatic, adLockReadOnly TextBox1の値をCol5列に存在する値を入れてやると、エラーは発生せずRecordsetを 取得し値を得ることができるのですが、Col5列に存在しない値を入れると、RS.Open行で必ずエラーが出ます。 エラー内容は下記の通りです。 --------------------------------------- Run-time error '-2147217900 (80040e14)' 不明 --------------------------------------- どうぞよろしくお願い致します。

みんなの回答

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.1

デバッカーが入っているはずなんですが? もっと詳しいメッセージが出ていたはずです。 とりあえず、このような場合エラー番号でヘルプ及びネットで検索してください。それで分かるはずです。 検索例; http://www.kitagawa-hanga.com/se/s_vberr.html あなたの場合、まだプログラミングは初心者のようですね。変数に値がセットされていない場合の事を考えましょう。C++、VBなどはかならす最初に変数の初期化をしないとエラーになるので、この問題はあまりおこりませんが、想定される値が無い時、ステートメントエラーになる場合があります。これはLikeの仕様を見れば分かります。

Frozen-Ray
質問者

補足

ご回答ありがとうございます。 >「デバッカーが入っているはずなんですが? もっと詳しいメッセージが出ていたはずです。」 エラーメッセージは本当にあれだけです。 >「とりあえず、このような場合エラー番号でヘルプ及びネットで検索してください。それで分かるはずです。」 一通り検索を行い、それでも分からなかった為、OKWaveにて質問しております。 >変数に値がセットされていない場合の事を考え・・・・ はい、この処理のもっと手前でもちろんチェックは入れてありますが。

関連するQ&A

  • Excel 1セル当りの文字数が255文字を超える場合のADOからの取

    Excel 1セル当りの文字数が255文字を超える場合のADOからの取り扱いについて 前回質問した続きになるのですが、VBA(ADO)で自分自身のSheet間で抽出・コピー・ペーストを行っているのですが、抽出の際に、1セルの内容が255文字を超えている場合、エラーが発生します。 strSQL = "Select * from [sheet1$] where Col1 like '" & schStr & "%'" Set RS = New ADODB.Recordset RS.Open SQL, CN, adOpenStatic, adLockReadOnly RS.Open でエラーが発生します。 私的には、255文字を超えているセルに関しては2行に分けるしかないのかなと考えております。 何か「こうすればいいよ」的なアドバイス頂けましたら幸いです。 よろしくお願い致します。

  • ExcelでADOを使って他のブックを参照したい

    いつも楽しく勉強させていただいております。 VBA関連のサイトを参照して同じブックにあるシートをADOを使って参照することに成功しました。 Dim CN As New ADODB.Connection Dim RS As New ADODB.Recordset Dim SQL As String Set CN = New ADODB.Connection CN.Provider = "Microsoft.Jet.OLEDB.4.0" CN.Properties("Extended Properties") = "Excel 8.0" CN.Open ThisWorkbook.FullName SQL = "SELECT * FROM [userlist$]" RS.Open SQL, CN, adOpenStatic, adLockReadOnly Do Until RS.EOF Debug.Print RS![P-1] RS.MoveNext Loop RS.Close CN.Close これを現在開いている別のブック、たとえばBook1にあるシートを参照するにはどこをどう書き換えたらいいでしょうか。

  • ADOでエクセルに接続した後の文字検索方法について

    http://home.att.ne.jp/zeta/gen/excel/c04p42.htm こちらのページ下の方で■ADOレコードセットを取得して検索しますを 参考にさせて頂き、 検索.xlsを作成→VBAに下のように記述してtest.xlsのA列の中の文字列”excel”を検索して、 もしexcelという文字があれば該当セルの横のセルの文字を返すというものです、 この中で、test.xlsのA列を検索する部分の記述で RS.Find RS.Fields(0) & "='excel'" の部分でうまく行きません。 エラー内容としては 実行時エラー ’3001’: 引数が間違った型、許容範囲外、または競合しています。 と出てしまいます。 ためしにtest.xlsのA1セルにkoumokuと入力して RS.Find RS.Fields(0) & "='excel'"を 以下のように書き換るとうまく行きます RS.Find "koumoku='excel'" test.xlsには項目を作らずに今回は 項目指定ではなく列を指定して文字列を検索したいのですが どなたかお知恵を拝借させていただきたく存じます。 Public Sub test() Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Dim SQL As String Set CN = New ADODB.Connection CN.Provider = "Microsoft.Jet.OLEDB.4.0" CN.Properties("Extended Properties") = "Excel 8.0" CN.Open "c:\test.xls" SQL = "SELECT * FROM [Sheet1$]" Set RS = New ADODB.Recordset RS.Open SQL, CN, adOpenStatic, adLockReadOnly 'RS.Find "koumoku='excel'" →これだとOK RS.Find RS.Fields(0) & "='excel'" If RS.EOF Then Debug.Print "Not Found" Else Debug.Print RS.Fields(1) TextBox1.Text = RS.Fields(1) End If End Sub

  • VBA ADOに関して

    お世話になります。 VBAに関して質問があります。 ADOでDBから値を取得する際、 TEXT型の値が全く取れてきません。 どなたか取得方法をご教授下さい。 宜しくお願い致します。 DB:Sybase OS: RedHat 8.0 Dim rs As ADODB.Recordset Dim sql As String sql = "select * from " & tblName //dbはADODB.Connection Set rs = db.Execute(sql) Do While Not rs.EOF //ここでTEXT型だと、取れてきません。  If IsNull(rs.Fields('Field名').Value) Then End If rs.MoveNext Loop

  • ADOでエクセルからSQL Serverへデータを移行するには

    エクセルvbaのADOを使って、 SQL Serverの「test」という名のデータベースの「Table_1」に 新規レコードを追加する事はできますか? エクセルからアクセスには Sub test() Dim データベース名 As String Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & データベース名 rs.Open "Tテーブル1", cn, adOpenKeyset, adLockOptimistic rs.AddNew rs.Fields("フィールド1") = データ rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub で移行しています。 これをエクセルからSQL Serverへ移行させるにはどうすればいいのでしょうか? よろしくお願いします。

  • ADOを使用してExcelファイルをオープンした場合にリソースが解放されない

    こんにちは。 いつもお世話になっております。 Excelがインストールされていない環境でExcelファイルの中身を参照するために ADOを使用した処理を実装しています。 以下のようなコードで動作しましたが、一度処理を実行後に続けて処理を実行した場合に ファイルアクセスのエラー(ConnectionのOpen時)が発生してしまいます。 (実行時エラー'2147418113 (8000ffff)'「致命的なエラーです。」) EXEを終了し、再度処理を実行するとうまく動作します。 おそらくExcelファイルのインスタンスが解放できていないという類のエラーであると思いますが、原因が分かりません。 (EXE起動後の2回目の処理で必ず発生するわけではなく、3回目の場合があるのも謎です。) 何か分かりましたらご教示下さい。 --------------------------------------------------------------------------------- inputFileName = App.Path + "\test.xls" outPutFileName = App.Path + "\test.csv" On Error GoTo errorHdr Set cn = New ADODB.Connection With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=" + inputFileName + ";" + "Extended Properties=Excel 5.0;" .Open End With strSQL = "SELECT * FROM [sheet1$]" Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient rs.Open strSQL, cn, adOpenDynamic, adLockReadOnly, adCmdText On Error GoTo 0 x = FreeFile Open outPutFileName For Output As #x Do Until rs.EOF buff = "" For col = 1 To rs.Fields.Count If col < rs.Fields.Count Then buff = buff & rs.Fields(col - 1).Value & "," Else buff = buff & rs.Fields(col - 1).Value End If Next If Len(buff) = rs.Fields.Count - 1 Then Exit Do End If Print #x, buff rs.MoveNext Loop Close #x rs.Close Set rs = Nothing cn.Close Set cn = Nothing MsgBox "完了しました。", vbInformation Exit Sub errorHdr: On Error GoTo 0 MsgBox "ファイルのオープンに失敗しました。", vbCritical If rs Is Nothing = False Then If rs.State = adStateOpen Then rs.Close End If Set rs = Nothing End If If cn.State = adStateOpen Then cn.Close End If Set cn = Nothing End Sub --------------------------------------------------------------------------------- <環境> Windows 2000(SP4), VB6.0(S6) ※ExcelファイルはExcel 95で作成(2500行×15列程度)

  • excelでのado接続での検索

    シートのA列に商品コードが入っており、別ブックのA列に商品コード、B列に商品名が入っています。 現シートのA列を一行ずつ読んで、その商品コードをキーに別ブックの商品コードを検索し一致するコードがあれば現シートのB列に別ブックの商品名をセットする、という作業を勉強がてらado接続を使って実行したいと思い、下記のコードで実行してみました。 Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Set CN = New ADODB.Connection CN.Provider = "Microsoft.Jet.OLEDB.4.0" CN.Properties("Extended Properties") = "Excel 8.0" CN.Open "C:\Users\*****\Desktop\shohinmaster.xls" For i = 2 To 最終行 Set RS = New ADODB.Recordset RS.Open "SELECT * FROM [shohin$] WHERE 商品コード = '" & Cells(i, 1) & "' ", CN If RS.EOF Then Cells(i, 2) = "???" Else Cells(i, 2) = 商品名 End If Next これで実行しますと、現シートの商品名は空白という結果になります。???とすらセットされませんでした。 また RS.Open の行の '" & Cells(i, 1) & "' という箇所なのですが、現シートの商品コードは数値で 入っているのですが、別シートの商品コードは文字列としてセットされていますのでこの形式にしております。 EXCELは2016、OSはWINDOWS7です。 どこが誤っているのかアドバイスいただければ幸いです。宜しくお願い致します。

  • ExcelからAccessのテーブルの値の取得ができない

    Excel2003からAccess2003のDBの値を取得するVBAを作成中なのですが、 ExcelのフォームにてTextBox1に入力した社員番号からネットワーク接続されたサーバーにあるmdbファイルから値を取得する内容で 以下のエラーが表示されます。  「実行時エラー '-2147217904 (80040e10)':   1つ以上の必要なパラメータの値が設定されていません。」 デバッグをすると、「rs1.Open sql1, con」の箇所と指摘されます。 以下にコードを貼り付けますので、間違っている点のご指摘をお願いいたします。 Private Sub CommandButton2_click() Dim shainID As Long Dim constr As String '接続文字列の定義 Dim con As ADODB.Connection Dim rs1 As ADODB.Recordset If TextBox1.Value = "" Then MsgBox "社員番号を入力してください", vbOKOnly + vbCritical, "社員番号入力エラー" TextBox1.SetFocus Else shainID = TextBox1.Value Range("B13").Value = shainID 'Connectionの設定 Set con = CreateObject("ADODB.Connection") constr = "provider = Microsoft.Jet.OLEDB.4.0;Data Source = \\192.168.1.100\ShainDB\shaindb.mdb" 'DB接続 con.Open constr 'RecordSetの作成 Set rs1 = CreateObject("ADODB.Recordset") 'SQL sql1 = "select 社員漢字氏名,性別,生年月日,電話番号,住所 from 社員テーブル where 社員番号 = shainID" If sql1 = "" Then MsgBox "入力した社員番号の社員はいません。", vbOKOnly + vbCritical, "社員番号入力エラー" TextBox1.SetFocus Else 'SQLを実行して対象をRecordSetに入れる rs1.Open sql1, con Set rs1 = con.sql1 Range("B14").Value = 社員漢字氏名 Range("B15").Value = 性別 Range("B16").Value = 生年月日 Range("B17").Value = 電話番号 Range("B18").Value = 住所 Unload Me 'フォームを閉じる End If End If End Sub

  • ADOでエクセルファイルの件数を取得したい

    エクセルvbaでadoを使って他ファイルの件数を取得することは可能でしょうか? もともと件数を取得したいファイルは共有フォルダに入っていて、 開くのにすごく時間がかかるのでADOで試みたいのです。 しかしうまくいきません。 当方の環境は Win7、エクセル2010です。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130_090.html を参考にしたのですが、 Const cnsProvider = "Microsoft.Jet.OLEDB.4.0" Const cnsExtProp = "Extended Properties" Const cnsExcel = "Excel 8.0" Const cnsDBName = "D:\Book1.xlsx" 'ローカルでテスト Sub ADO_WS_TEST1() Dim dbCon As ADODB.Connection Dim dbRes As ADODB.Recordset Dim GYO As Long, COL As Long Dim strSQL As String ' Connection生成 Set dbCon = New ADODB.Connection With dbCon .Provider = cnsProvider .Properties(cnsExtProp) = cnsExcel .Open cnsDBName End With の .Open cnsDBNameの部分で、 実行時エラー-2147467259 外部テーブルのフォーマットが正しくありません。 となります。 Excel 8.0が原因なのでしょうか? オフィス2010でもExcel 8.0でいいのでしょうか? ココがうまく通ったら、 "SELECT * FROM [Sheet1$]"の部分をCOUNTにして 件数が取得できるかなー と思うのです。 リンク先を読むと、adoでやってもあまり早くはならなそうですが一応やってみたいのです。 よろしくお願いします。

  • Excel ado処理について

    現在、Excel(インターフェース用)⇔(社内LAN経由)⇔Excel(マスターファイル×4)間で ADOを使用して、データ処理を行おうとしております。 (なお、今までは、画面更新OFFにしてファイルを素直にOPENして 各ファイルデータを格納して処理を行っていたのですが、 業務人員&量の拡大に伴い、Excelの競合が激しくなり、ADOによる処理へと 対応変更を考えております) マスターファイル×4はAccessのように、主キーが振ってあり、連結しております。 インターフェース用のExcelから各マスターファイルをADOで読み込み、 インターフェース用のExcelへとデータを転記する処理を作成中ですが、 なぜか、マスターファイル(A・B・C・D)のうち、Cのファイルのみ、データを10件ほど認識しておらず、 A=B=D≠Cとなってしまいます。 マスターファイルを直接開いて確認しますが、データ数は間違いなく一致しておりますが、 VBA上では認識しておりません。 自分なりに解析したところ、Cのファイルだけ、 "RS.MoveNext"の部分でデータが10件ほど飛んでいると思っております。 以下がそのソースですが、 どこが問題なのか?または、考えうる原因が他にあれば、ご教授いただきたいです。 本当に困っています。宜しくお願い致します。 --------------------------------------------------------------------- Sub StorageData() 'Frag初期値 SW_OK = True On Error GoTo ErrADO '取引先詳細 'ADO定型分 Set CN = New ADODB.Connection CN.Provider = "Microsoft.Jet.OLEDB.4.0" CN.Properties("Extended Properties") = "Excel 8.0" CN.Open Path00 & "反響データ\" & FileName01 Set RS = New ADODB.Recordset RS.Open SQL, CN, adOpenStatic, adLockReadOnly ReDim Data00(RS.RecordCount, 20) Ctr = 1 Do For i = 0 To 20 If Not RS.BOF Then Data00(Ctr, i) = RS.Fields(i) End If Next i i = 0 RS.MoveNext Ctr = Ctr + 1 Loop Until RS.EOF Ctr = Ctr - 1 ' ReDim Preserve Data00(Ctr, 20) Ctr = 0 Set RS = Nothing CN.Close 'お客さま詳細 'ADO定型分 Set CN = New ADODB.Connection CN.Provider = "Microsoft.Jet.OLEDB.4.0" CN.Properties("Extended Properties") = "Excel 8.0" CN.Open Path00 & "反響データ\" & FileNam

専門家に質問してみよう