タイトル : Re^2: EXCEL シートをレコードセットで取りこめない 投稿日 : 2020/07/10(Fri) 20:12 投稿者 : 悩めるEXCELマクロ士
魔界の仮面弁士 さま 返信ありがとうございます。 そしていつもお世話になっていまs。 いつもながら、こちらの環境を書かずに 投稿してしまって申し訳ありません。 一応、今現在組んであるプログラムを 書くと、 まず、シートのコネクト部分から Public Function Sheet_Conect(DataSource As String) As Object Dim objCN As Object Dim strCN As String Set objCN = CreateObject("ADODB.Connetion") strCN = "Provider=Microsoft.ACE.OLEDB.12.0;" strCN = strCN & "Data Source=" & DataSource & ";" strCN = strCN & "Extended Properties=""Excel 12.0;" strCN = strCN & "HDR=Yes;IMEX=1"";" objCN.Open strCn Set Sheet_Conect = objCN End Function と作成してあって、必要に応じて呼び出しています。 次にデータ取得部分ですが Public Function GetData(tmpCD As String) As String Dim RecSet As Object Dim Sh_CN As Object Dim strSQL As String Set Sh_CN = Sheet_Conect(ThisWorkbook.FullName) strSQL = "SELECT * FROM [" & (シート名&取得エリア) & "] " strSQL = strSQL & "WHERE CD = '" & tmpCD & "'" Set RecSet = CreateObject("ADODB.Recordset") RecSet.Open strSQL,Sh_CN,adOpenStatic,adLockReadOnly GetData=RecSet(0) End Function と組んであり、これであるプロシージャからの呼び出しでは 正常に目的のデータが取得でき、新しく追加した機能からの 呼び出しでは、 『抽出条件でデータ型が一致しません』となってしまいます。 一応、本日会社にていろいろと試したところやはり WHERE句のシングルコーテーションを抜くと取得の可否が逆転します。 ということを踏まえると、おそらく検索対象である[CD]列が ある時には文字列で、ある時には数値で認識されてしまっているのでは ないかと思っています。 なので、取得対象であるシートのデータ部分の1行目に空データを 挿入して[CD]のセルに文字(X)を入れてみて実行してみたところ 両方のプロシージャから読んでもデータが取得できるように なりました。 ただ、これが正しい方法なのかなぜそうなるのか、 他にもっと良い方法があるのかわかりません。 よろしくご教授いただけると幸いです。 |