タイトル | : Re^2: EXCEL シートをレコードセットで取りこめない |
記事No | : 16581 |
投稿日 | : 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)を入れてみて実行してみたところ 両方のプロシージャから読んでもデータが取得できるように なりました。 ただ、これが正しい方法なのかなぜそうなるのか、 他にもっと良い方法があるのかわかりません。 よろしくご教授いただけると幸いです。
|