tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。